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()
不起作用。。。