根据条件进行 Spark 聚合计数

aNa*_*ame 3 scala apache-spark

我正在尝试对数据框进行分组,然后在使用计数聚合行时,我想在计数之前对行应用条件。
这是一个例子:

val test=Seq(("A","X"),("A","X"),("B","O"),("B","O"),("c","O"),("c","X"),("d","X"),("d","O")).toDF
test.show
+---+---+
| _1| _2|
+---+---+
|  A|  X|
|  A|  X|
|  B|  O|
|  B|  O|
|  c|  O|
|  c|  X|
|  d|  X|
|  d|  O|
+---+---+
Run Code Online (Sandbox Code Playgroud)

在此示例中,当此处的值 ='X'
是预期结果时,我想按列 _1 对列 _2 的计数进行分组:

+---+-----------+
| _1| count(_2) |
+---+-----------+
|  A|  2        |
|  B|  0        |
|  c|  1        |
|  d|  1        |
+---+-----------+
Run Code Online (Sandbox Code Playgroud)

Vam*_*ala 5

用于when获取此聚合。此处显示的 PySpark 解决方案。

from pyspark.sql.functions import when,count
test.groupBy(col("col_1")).agg(count(when(col("col_2") == 'X',1))).show()
Run Code Online (Sandbox Code Playgroud)