小编pau*_*ult的帖子

根据使用散射的变量绘制没有填充,颜色和大小的圆圈

我必须在绘图上显示的信息是2个坐标:大小和颜色(无填充).颜色很重要,因为我需要一种颜色图表类型的图表来根据颜色值显示信息.

我尝试了两种不同的方法:

  1. 创建特定圈子并添加各个圈子.

    circle1 = plt.Circle(x, y, size, color='black', fill=False)
            ax.add_artist(circle1)
    
    Run Code Online (Sandbox Code Playgroud)

这种方法的问题是我找不到根据颜色值设置颜色的方法.即,对于0-1的值范围,我希望0为完全蓝色而1为完全红色,因此在它们之间是紫色的不同色调,其红色/蓝色取决于颜色值的高/低.

  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'只是为了绘制周长.

python matplotlib scatter-plot colorbar

6
推荐指数
1
解决办法
1万
查看次数

spark.python.worker.reuse没有按预期工作

鉴于此代码块

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明确地发生这种意外行为

apache-spark pyspark

6
推荐指数
0
解决办法
358
查看次数

读取spark中的bytes列

我有一个数据集,其中包含一个未知(非友好)编码的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读取相同的文件 …

encoding apache-spark apache-spark-sql pyspark

6
推荐指数
1
解决办法
1252
查看次数

如何在 PySpark 2.x 中使用修剪?

代码是:

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 中已弃用吗?我不明白为什么它不起作用,而同一命名空间中的其他一些函数却工作得很好

apache-spark-sql pyspark

6
推荐指数
1
解决办法
3382
查看次数

Spark Dataframe中`float`与`np.nan`的比较

这是预期的行为吗?我本来想提出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)

python numpy nan apache-spark pyspark

6
推荐指数
1
解决办法
344
查看次数

python 中的 lapply 等效函数

我有包含 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)

python python-3.x pandas

6
推荐指数
1
解决办法
2万
查看次数

获取排序组合

我有一个输入

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.但无法提出解决方案.

python combinations

5
推荐指数
1
解决办法
2302
查看次数

如何在PySpark Dataframe show中设置显示精度

调用时如何在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解决方案时找不到答案,并且我认为它将来可能会对其他人有所帮助。

pyspark spark-dataframe

5
推荐指数
1
解决办法
4208
查看次数

在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)

pyspark orc pyspark-sql

5
推荐指数
1
解决办法
4308
查看次数

将pyspark数据帧与另一个数据帧进行比较

我有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)

python dataframe apache-spark-sql pyspark

5
推荐指数
1
解决办法
1956
查看次数