pyspark - 获取 PySpark 数据框中每行的 null 数
问题描述
这可能是重复的,但不知何故我已经搜索了很长时间:
我想获取 Spark 数据帧中每行的空值数。IE
col1 col2 col3
null 1 a
1 2 b
2 3 null
最后应该是:
col1 col2 col3 number_of_null
null 1 a 1
1 2 b 0
2 3 null 1
一般来说,我想获取某个字符串或数字出现在 spark 数据框行中的次数。
IE
col1 col2 col3 number_of_ABC
ABC 1 a 1
1 2 b 0
2 ABC ABC 2
我正在使用 Pyspark 2.3.0,并且更喜欢不涉及 SQL 语法的解决方案。出于某种原因,我似乎无法谷歌这个。:/
编辑:假设我有很多列,我无法将它们全部列出。
EDIT2:我明确不想有熊猫解决方案。
EDIT3:用总和或手段解释的解决方案不起作用,因为它会引发错误:
(data type mismatch: differing types in '((`log_time` IS NULL) + 0)' (boolean and int))
...
isnull(log_time#10) + 0) + isnull(log#11))
解决方案
如pasha701的回答所述,我求助于 map
and reduce
。请注意,我正在使用 Spark 1.6.x 和 Python 2.7
将您的 DataFrame 用作 df (并且按原样)
dfvals = [
(None, "1", "a"),
("1", "2", "b"),
("2", None, None)
]
df = sqlc.createDataFrame(dfvals, ['col1', 'col2', 'col3'])
new_df = df.withColumn('null_cnt', reduce(lambda x, y: x + y,
map(lambda x: func.when(func.isnull(func.col(x)) == 'true', 1).otherwise(0),
df.schema.names)))
检查值是否为Null
并赋值1
或0
。添加结果以获取计数。
new_df.show()
+----+----+----+--------+
|col1|col2|col3|null_cnt|
+----+----+----+--------+
|null| 1| a| 1|
| 1| 2| b| 0|
| 2|null|null| 2|
+----+----+----+--------+
推荐阅读
- mysql - 错误 1452:无法添加或更新子行:外键约束失败,任何人都可以提供帮助
- mongodb - '在副本集配置中找到名为'majority'的写入关注模式'错误
- flutter - 如何在 Flutter 中使 FlatButtons 的宽度相同
- c# - C# 大文件下载可从 azure blob 存储恢复
- python - 使用 Keras 理解 WeightedKappaLoss
- python - Python 3井字游戏的问题
- javascript - 如何将 JavaScript 数组作为参数传递给 URL 并在 PHP 中捕获?
- c# - SVG 渐变文件不正确地渲染到图形
- oracle - 从 Oracle 数据库中的 sql developer 生成 sql 跟踪文件
- sharepoint - Sharepoint 中的 1.24TB 存储空间是多少?