rdd.histogram 给出“无法在 RDD 中生成非数字的桶”错误

Ton*_*ony 5 apache-spark pyspark

使用以下一列数据框,

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('test').getOrCreate()
df = spark.createDataFrame([[1],[2],[3],[4],[5]])
df.show()

+---+
| _1|
+---+
|  1|
|  2|
|  3|
|  4|
|  5|
+---+
Run Code Online (Sandbox Code Playgroud)

使用 rdd 的直方图函数计算直方图。

df.rdd.histogram(2)
Run Code Online (Sandbox Code Playgroud)

然后我收到一个错误:无法在 RDD 中生成非数字的桶。我很困惑,因为我的数据框中的所有值都是数字。

在此处输入图片说明

Oli*_*Oli 5

问题是这df.rdd是行的 RDD,而行不是数字。您可以通过在 pyspark shell 中调用 collect 来验证它,例如:

>>> df.rdd.collect()
[Row(_1=1), Row(_1=2), Row(_1=3), Row(_1=4), Row(_1=5)] 
Run Code Online (Sandbox Code Playgroud)

要完成这项工作,您可以简单地从行中提取数字列,如下所示:

>>> df.rdd.map(lambda x : x[0]).histogram(2)
([1, 3, 5], [2, 3]) 
Run Code Online (Sandbox Code Playgroud)