我有一个非常宽的df,其中包含大量的列。我需要在python中获取每行非空值的计数。
DF示例-
+-----+----------+-----+-----+-----+-----+-----+-----+
| name| date|col01|col02|col03|col04|col05|col06|
+-----+----------+-----+-----+-----+-----+-----+-----+
|name1|2017-12-01|100.0|255.5|333.3| null|125.2|132.7|
|name2|2017-12-01|101.1|105.5| null| null|127.5| null|
我想在col01-col06中添加一列具有非空值的计数-
+-----+----------+-----+-----+-----+-----+-----+-----+-----+
| name| date|col01|col02|col03|col04|col05|col06|count|
+-----+----------+-----+-----+-----+-----+-----+-----+-----+
|name1|2017-12-01|100.0|255.5|333.3| null|125.2|132.7| 5|
|name2|2017-12-01|101.1|105.5| null| null|127.5| null| 3|
我能够在这样的熊猫df中得到它-
df['count']=df.loc[:,'col01':'col06'].notnull().sum(axis=1)
但是到目前为止,spark df还没有运气:(有什么想法吗?
答案 0 :(得分:0)
将null
的值转换为true
/ false
,然后转换为整数,然后将它们求和:
from pyspark.sql import functions as F
from pyspark.sql.types import IntegerType
df = spark.createDataFrame([[1, None, None, 0],
[2, 3, 4, None],
[None, None, None, None],
[1, 5, 7, 2]], 'a: int, b: int, c: int, d: int')
df.select(sum([F.isnull(df[col]).cast(IntegerType()) for col in df.columns]).alias('null_count')).show()
输出:
+----------+
|null_count|
+----------+
| 2|
| 1|
| 4|
| 0|
+----------+