我必须在绘图上显示的信息是2个坐标:大小和颜色(无填充).颜色很重要,因为我需要一种颜色图表类型的图表来根据颜色值显示信息.
我尝试了两种不同的方法:
创建特定圈子并添加各个圈子.
circle1 = plt.Circle(x, y, size, color='black', fill=False)
ax.add_artist(circle1)
Run Code Online (Sandbox Code Playgroud)这种方法的问题是我找不到根据颜色值设置颜色的方法.即,对于0-1的值范围,我希望0为完全蓝色而1为完全红色,因此在它们之间是紫色的不同色调,其红色/蓝色取决于颜色值的高/低.
之后我尝试使用分散功能:
size.append(float(Info[i][8]))
plt.scatter(x, y, c=color, cmap='jet', s=size, facecolors='none')
Run Code Online (Sandbox Code Playgroud)这种方法的问题是大小似乎没有变化,这可能是我创建数组大小的方式的原因.因此,如果我用大数字替换大小,则图表显示为圆圈.这facecolours = 'none'只是为了绘制周长.
鉴于此代码块
def return_pid(_): yield os.getpid()
spark = SparkSession.builder.getOrCreate()
pids = set(spark.sparkContext.range(32).mapPartitions(return_pid).collect())
print(pids)
pids = set(spark.sparkContext.range(32).mapPartitions(return_pid).collect())
print(pids)
Run Code Online (Sandbox Code Playgroud)
我期待相同的python进程id将被打印两次.相反,正在打印完全不同的Python进程ID.
spark.python.worker.reuse是真的,但默认.但如果spark.python.worker.reuse=true明确地发生这种意外行为
我有一个数据集,其中包含一个未知(非友好)编码的ID字段.我可以使用普通的python读取单列,并验证这些值在多个数据集中是不同的和一致的(即它可以用作连接的主键).
使用时加载文件spark.read.csv,似乎spark正在将列转换为utf-8.但是,某些多字节序列将转换为Unicode字符U+FFFD REPLACEMENT CHARACTER.(EF BF BD十六进制).
有没有办法强制Spark以字节而不是字符串的形式读取列?
以下是一些可用于重新创建问题的代码(让列为aID字段):
使用示例数据创建文件
data = [
(bytes(b'\xba\xed\x85\x8e\x91\xd4\xc7\xb0'), '1', 'a'),
(bytes(b'\xba\xed\x85\x8e\x91\xd4\xc7\xb1'), '2', 'b'),
(bytes(b'\xba\xed\x85\x8e\x91\xd4\xc7\xb2'), '3', 'c')
]
with open('sample.csv', 'wb') as f:
header = ["a", "b", "c"]
f.write(",".join(header)+"\n")
for d in data:
f.write(",".join(d) + "\n")
Run Code Online (Sandbox Code Playgroud)
使用熊猫阅读
import pandas as pd
df = pd.read_csv("sample.csv", converters={"a": lambda x: x.encode('hex')})
print(df)
# a b c
#0 baed858e91d4c7b0 1 a
#1 baed858e91d4c7b1 2 b
#2 baed858e91d4c7b2 3 c
Run Code Online (Sandbox Code Playgroud)
尝试使用Spark读取相同的文件 …
代码是:
from pyspark.sql import functions as F
df = df.select(F.trim("MyColumn"))
Run Code Online (Sandbox Code Playgroud)
错误是:
Py4JError: An error occurred while calling z:org.apache.spark.sql.functions.trim. Trace:
py4j.Py4JException: Method trim([class java.lang.String]) does not exist
Run Code Online (Sandbox Code Playgroud)
trimPySpark 2.x 中已弃用吗?我不明白为什么它不起作用,而同一命名空间中的其他一些函数却工作得很好
这是预期的行为吗?我本来想提出Spark的问题,但这似乎是一种基本功能,很难想象这里有bug。我想念什么?
蟒蛇
import numpy as np
>>> np.nan < 0.0
False
>>> np.nan > 0.0
False
Run Code Online (Sandbox Code Playgroud)
PySpark
from pyspark.sql.functions import col
df = spark.createDataFrame([(np.nan, 0.0),(0.0, np.nan)])
df.show()
#+---+---+
#| _1| _2|
#+---+---+
#|NaN|0.0|
#|0.0|NaN|
#+---+---+
df.printSchema()
#root
# |-- _1: double (nullable = true)
# |-- _2: double (nullable = true)
df.select(col("_1")> col("_2")).show()
#+---------+
#|(_1 > _2)|
#+---------+
#| true|
#| false|
#+---------+
Run Code Online (Sandbox Code Playgroud) 我有包含 7 个电话号码条目的数据框 df,我想创建新的重命名列,例如 ph1 .. ph7 并用电话号码的清理值填充它们,即删除空格、“/”、“-”、“+”等。
有了 R ,我可以轻松使用 lapply 有没有办法在 Python 中做同样的事情?我知道 do.call() 可以做同样的事情,但面临编码相同的问题
con_1 <- con[, c("ph1", "ph2", "ph3", "ph4", "ph5", "ph6", "ph7") :=
lapply(.SD, function(x) { gsub(paste(unlist(list(" ", "/", "-", "+")), collapse = "|"), replace = "", x) }),
.SDcols = c("phone1", "phone2", "phone3", "phone4", "phone5", "phone6", "phone7")]
Run Code Online (Sandbox Code Playgroud)
数据帧 con 是:
kac play_id phone1 phone2 phone3 phone4 phone5 phone6 phone7
1: 5004490 20002075 0900031349 090891349 <NA> <NA> <NA> <NA> <NA>
2: 5003807 00601731 <NA> <NA> …Run Code Online (Sandbox Code Playgroud) 我有一个输入
A = [2,0,1,3,2,2,0,1,1,2,0].
Run Code Online (Sandbox Code Playgroud)
下面我删除所有重复项
A = list(Set(A))
Run Code Online (Sandbox Code Playgroud)
A现在[0,1,2,3].现在我希望我可以使用此列表进行所有对组合,但是它们不需要是唯一的...因此[0,3]等于[3,0]和[2,3]等于[3,2].在这个例子中它应该返回
[[0,1],[0,2],[0,3],[1,2],[1,3],[2,3]]
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一目标?我查看了iteratoolslib.但无法提出解决方案.
调用时如何在PySpark中设置显示精度.show()?
考虑以下示例:
from math import sqrt
import pyspark.sql.functions as f
data = zip(
map(lambda x: sqrt(x), range(100, 105)),
map(lambda x: sqrt(x), range(200, 205))
)
df = sqlCtx.createDataFrame(data, ["col1", "col2"])
df.select([f.avg(c).alias(c) for c in df.columns]).show()
Run Code Online (Sandbox Code Playgroud)
哪个输出:
#+------------------+------------------+
#| col1| col2|
#+------------------+------------------+
#|10.099262230352151|14.212583322380274|
#+------------------+------------------+
Run Code Online (Sandbox Code Playgroud)
如何更改它,使其仅在小数点后显示3位数字?
所需的输出:
#+------+------+
#| col1| col2|
#+------+------+
#|10.099|14.213|
#+------+------+
Run Code Online (Sandbox Code Playgroud)
这是此scala问题的PySpark版本。我将其发布在这里是因为在搜索PySpark解决方案时找不到答案,并且我认为它将来可能会对其他人有所帮助。
我正在将SQL查询开发到基于一组ORC文件的spark数据帧。该程序是这样的:
from pyspark.sql import SparkSession
spark_session = SparkSession.builder.appName("test").getOrCreate()
sdf = spark_session.read.orc("../data/")
sdf.createOrReplaceTempView("test")
Run Code Online (Sandbox Code Playgroud)
现在,我有一个名为“测试”的表。如果我做类似的事情:
spark_session.sql("select count(*) from test")
Run Code Online (Sandbox Code Playgroud)
那么结果会很好。但是我需要在查询中获取更多列,包括数组中的某些字段。
In [8]: sdf.take(1)[0]["person"]
Out[8]:
[Row(name='name', value='tom'),
Row(name='age', value='20'),
Row(name='gender', value='m')]
Run Code Online (Sandbox Code Playgroud)
我已经尝试过类似的东西:
spark_session.sql("select person.age, count(*) from test group by person.age")
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。我的问题是:如何访问“人”数组中的字段?
谢谢!
编辑:
sdf.printSchema()的结果
In [3]: sdf.printSchema()
root
|-- person: integer (nullable = true)
|-- customtags: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- name: string (nullable = true)
| | |-- value: string (nullable = true) …Run Code Online (Sandbox Code Playgroud) 我有2个数据帧来比较它们具有相同的列数,并且比较结果应该具有不匹配的字段以及值和ID.
数据帧一
+-----+---+--------+
| name| id| City|
+-----+---+--------+
| Sam| 3| Toronto|
| BALU| 11| YYY|
|CLAIR| 7|Montreal|
|HELEN| 10| London|
|HELEN| 16| Ottawa|
+-----+---+--------+
Run Code Online (Sandbox Code Playgroud)
数据帧二
+-------------+-----------+-------------+
|Expected_name|Expected_id|Expected_City|
+-------------+-----------+-------------+
| SAM| 3| Toronto|
| BALU| 11| YYY|
| CLARE| 7| Montreal|
| HELEN| 10| Londn|
| HELEN| 15| Ottawa|
+-------------+-----------+-------------+
Run Code Online (Sandbox Code Playgroud)
预期产出
+---+------------+--------------+-----+
| ID|Actual_value|Expected_value|Field|
+---+------------+--------------+-----+
| 7| CLAIR| CLARE| name|
| 3| Sam| SAM| name|
| 10| London| Londn| City|
+---+------------+--------------+-----+
Run Code Online (Sandbox Code Playgroud)
码
from pyspark.sql import SQLContext
from pyspark.context import …Run Code Online (Sandbox Code Playgroud) pyspark ×7
python ×5
apache-spark ×3
colorbar ×1
combinations ×1
dataframe ×1
encoding ×1
matplotlib ×1
nan ×1
numpy ×1
orc ×1
pandas ×1
pyspark-sql ×1
python-3.x ×1
scatter-plot ×1