【发布时间】:2020-04-28 05:05:40
【问题描述】:
我目前有一个 PySpark 数据框,其中包含许多由整数计数填充的列。其中许多列的计数为零。 我想找到一种方法来计算计数大于零的列数。
换句话说,我想要一种对一行中的值求和的方法,其中给定行的所有列都是有效的布尔值(尽管可能不需要数据类型转换)。我的表中有几列是日期时间或字符串,所以理想情况下我会有一种首先选择数字列的方法。
当前数据框示例和所需输出
+---+---------- +----------+------------
|USER| DATE |COUNT_COL1| COUNT_COL2|... DESIRED COLUMN
+---+---------- +----------+------------
| b | 7/1/2019 | 12 | 1 | 2 (2 columns are non-zero)
| a | 6/9/2019 | 0 | 5 | 1
| c | 1/1/2019 | 0 | 0 | 0
Pandas:例如,在 pandas 中,这可以通过选择数字列、转换为 bool 并与 axis=1 求和来完成。我正在寻找一个 PySpark 等价物。
test_cols=list(pandas_df.select_dtypes(include=[np.number]).columns.values)
pandas_df[test_cols].astype(bool).sum(axis=1)
【问题讨论】:
-
尝试类似:
df.withColumn('cnt', sum((df[c[0]]>0).astype("int") for c in df.dtypes if c[1] in ['int','long'])).show()。您可以扩展列表以包括 double、float 等。
标签: python apache-spark pyspark