有啥方法可以在 pyspark 数据框中找到包含数据的列数

Posted

技术标签:

【中文标题】有啥方法可以在 pyspark 数据框中找到包含数据的列数【英文标题】:Is there any method to find number of columns having data in pyspark data frame有什么方法可以在 pyspark 数据框中找到包含数据的列数 【发布时间】:2020-01-19 12:51:34 【问题描述】:

我有一个包含 7 列的 pyspark 数据框,我必须添加一个名为“sum”的新列并计算 sum 列中包含数据(非空)的列数。Example a data frame in which yellow highlighted part is required answer

【问题讨论】:

【参考方案1】:

这个总和可以这样计算:

df = spark.createDataFrame([
    (1, "a", "xxx", None, "abc", "xyz","fgh"), 
    (2, "b", None, 3, "abc", "xyz","fgh"),
    (3, "c", "a23", None, None, "xyz","fgh")
], ("ID","flag", "col1", "col2", "col3", "col4", "col5"))

from pyspark.sql import functions as F
from pyspark.sql.types import IntegerType

df2 = df.withColumn("sum",sum([(~F.isnull(df[col])).cast(IntegerType()) for col in df.columns]))
df2.show()
+---+----+----+----+----+----+----+---+
| ID|flag|col1|col2|col3|col4|col5|sum|
+---+----+----+----+----+----+----+---+
|  1|   a| xxx|null| abc| xyz| fgh|  6|
|  2|   b|null|   3| abc| xyz| fgh|  6|
|  3|   c| a23|null|null| xyz| fgh|  5|
+---+----+----+----+----+----+----+---+

希望这会有所帮助!

【讨论】:

谢谢,它给了我错误“列不可迭代”。 实际上,就我而言,它是...F.sum(...) 给了我这样的错误,所以我想说请检查您的导入,这应该可以工作 我已经从 pyspark.sql import functions as F from pyspark.sql.types import IntegerType 中像这样导入了,它仍然无法正常工作。 再一次,这一定与导入有关 - 也许您已经导入了上面覆盖某些功能的东西?请删除所有前面的导入,然后重试。您可以在此处找到对此问题的另一种解释:***.com/a/53868119/4113409。在这里我无能为力... 非常感谢,删除 sum (del sum) 后就成功了。

以上是关于有啥方法可以在 pyspark 数据框中找到包含数据的列数的主要内容,如果未能解决你的问题,请参考以下文章

计算 pyspark 数据框中的聚类成本

PySpark:以下两种在数据框中使用 desc 函数有啥区别?

使用 pyspark 跟踪和查找数据框中的最新值

PYSPARK:如何在 pyspark 数据框中找到两列的余弦相似度?

如何在pyspark数据框中找到没有分组的累积频率

如何更改pyspark数据框中列的顺序?