pyspark数据帧中按行计算空数

时间:2018-10-17 22:56:52

标签: dataframe pyspark apache-spark-sql pyspark-sql

所以我想按行计算数据帧中的空值数量。

请注意,有50多个列,我知道我可以做一个case / when语句来做到这一点,但是我更喜欢一个更整洁的解决方案。

例如,一个子集:

columns = ['id', 'item1', 'item2', 'item3']
vals = [(1, 2, 0, None),(2, None, 1, None),(3,None,9, 1)]
df=spark.createDataFrame(vals,columns)
df.show()

+---+-----+-----+-----+
| id|item1|item2|item3|
+---+-----+-----+-----+
|  1|    2|  'A'| null|
|  2| null|    1| null|
|  3| null|    9|  'C'|
+---+-----+-----+-----+

运行代码后,所需的输出为:

+---+-----+-----+-----+--------+
| id|item1|item2|item3|numNulls|
+---+-----+-----+-----+--------+
|  1|    2|  'A'| null|       1|
|  2| null|    1| null|       2|
|  3| null|    9|  'C'|       1|
+---+-----+-----+-----+--------+

编辑:并非所有非null值都为整数。

1 个答案:

答案 0 :(得分:4)

null转换为1,将其他转换为0,然后将sum转换为所有列:

df.withColumn('numNulls', sum(df[col].isNull().cast('int') for col in df.columns)).show()
+---+-----+-----+-----+--------+
| id|item1|item2|item3|numNulls|
+---+-----+-----+-----+--------+
|  1|    2|    0| null|       1|
|  2| null|    1| null|       2|
|  3| null|    9|    1|       1|
+---+-----+-----+-----+--------+