逐行计算pyspark数据帧中的空值数
Posted
技术标签:
【中文标题】逐行计算pyspark数据帧中的空值数【英文标题】:Counting number of nulls in pyspark dataframe by row 【发布时间】:2018-10-17 22:56:52 【问题描述】:所以我想逐行计算数据帧中空值的数量。
请注意,有 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|
+---+-----+-----+-----+--------+
编辑:并非所有非空值都是整数。
【问题讨论】:
【参考方案1】:将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|
+---+-----+-----+-----+--------+
【讨论】:
这些值实际上并不总是整数,我已经更新了问题以反映这一点。 答案不假定整数。它通常检查 null,如果为 null,则将值替换为 1,否则为 0。然后求和。 完美运行。谢谢。 我在同一个例子中得到错误TypeError: 'Column' object is not callable
所以我使用 pyspark.sql.functions.sum 而不是 Python sum 这给我带来了问题。更多关于区别here以上是关于逐行计算pyspark数据帧中的空值数的主要内容,如果未能解决你的问题,请参考以下文章