Python pyspark dataframe多维数据集方法返回重复的空值
我有以下数据(您可以通过复制和粘贴来复制): 让我们看看Python pyspark dataframe多维数据集方法返回重复的空值,python,python-2.7,apache-spark,pyspark,spark-dataframe,Python,Python 2.7,Apache Spark,Pyspark,Spark Dataframe,我有以下数据(您可以通过复制和粘贴来复制): 让我们看看l_df的模式: l_df.printSchema() root |-- value: boolean (nullable = true) 现在我想使用cube()来计算value列中每个不同值的频率: l_df.cube("value").count().show() 但是我看到两种类型的null值 +-----+-----+ |value|count| +-----+-----+ | true| 67| | null| 10
l_df
的模式:
l_df.printSchema()
root
|-- value: boolean (nullable = true)
现在我想使用cube()
来计算value
列中每个不同值的频率:
l_df.cube("value").count().show()
但是我看到两种类型的null
值
+-----+-----+
|value|count|
+-----+-----+
| true| 67|
| null| 100|
| null| 33|
+-----+-----+
要验证我实际上没有两种类型的null
:
l_df.select("value").distinct().collect()
[Row(value=None), Row(value=True)]
实际上只有一种类型的null
:
l_df.select("value").distinct().collect()
[Row(value=None), Row(value=True)]
请仔细检查:
l_df.select("value").distinct().count()
然后返回2
我还注意到len(l)
是100
,第一个null
等于这个数字。为什么会这样
系统信息:linux2上的Spark 2.1.0、Python 2.7.8、
[GCC 4.1.2 20070626(Red Hat 4.1.2-14)]这些不是两种类型的空值,而是不同级别聚合的结果。如cube
应用程序中所述,它相当于:
SELECT NULL AS value, COUNT(*) FROM df
UNION ALL
SELECT value, COUNT(*) FROM df GROUP BY value
第一个查询生成tuple(null,100)
(记录总数),其中null
只是一个占位符,第二个查询生成tuple(true,67)
,(null,33)
,其中null
是value
列的级别之一
使用分组
(或分组_id
)检查很容易:
groupBy('value').count().show()将按照@pault所说的那样执行
对于多维数据集,添加“过滤器”方法对我很有效
df.cube("value").count().filter( col('count')<df.count() ).show()
df.cube(“value”).count().filter(col('count')没有我的环境可用于测试ATM,但是为什么不直接做l_df.groupBy('value').count().show()?是的,那会起作用。但是我仍然想弄清楚为什么cube()
不起作用。。。