Apache Spark:根据条件将不同的行分组在一起

时间:2018-11-27 02:04:32

标签: apache-spark pyspark

我正在尝试简化Apache Spark(Python)中的数据框。

我有一个这样的数据框

person   X    N   A     B     C     D
NCC1701 1   16309 false true  false false
NCC1864 1   16309 false false true  false
...

我想对每行的X和N进行分组,例如groupBy('X','N'),但我想对AD每列显示的频率进行计数,例如false = 0和true = 1所以我得到这样的结果

X    N     A B  C D
1    16309 0 1  1 0

简而言之,我试图将X和N列组合在一起,并为每对X和N分别获取“真”和“假”的总和。如果“真”和“假”是精确数字,我可能知道如何执行此操作,但我不知道如何将'true'设为1,将'false'设为0,然后求和。

如何将X和N的不同单元格分组在一起?

感谢您的时间

1 个答案:

答案 0 :(得分:2)

使用cast方法将数据类型从布尔值转换为整数,然后执行sum

import pyspark.sql.functions as f
cols = ['A', 'B', 'C', 'D']
df.groupBy('X', 'N').agg(*(f.sum(f.col(x).cast('int')).alias(x) for x in cols)).show()
+---+-----+---+---+---+---+
|  X|    N|  A|  B|  C|  D|
+---+-----+---+---+---+---+
|  1|16309|  0|  1|  1|  0|
+---+-----+---+---+---+---+