Apache Spark组按字段求和

时间:2017-04-25 05:24:49

标签: apache-spark spark-dataframe

我的数据框有三列

amount  type  id
12       A    1
10       C    1
21       B    2
10       A    2
2        B    3
44       B    3

我需要对每种类型的金额求和,然后按id对它们进行分组。我的解决方案就像

GroupedData result = dataFrame.agg(
    when(dataFrame.col("type").like("A%")
            .or(dataFrame.col("type").like("C%")), 
        sum("amount"))
    .otherwise(0)
).agg(
    when(dataFrame.col("type").like("B%"), sum("amount"))
    .otherwise(0)
)
.groupBy(dataFrame.col("id"));

这对我来说不合适。我需要返回DataFrame作为数据结果

amount  type    id
22     A or C   1
21       B      2
10       A      2
46       B      3

我不能使用双groupBy,因为两种不同的类型可能在一个总和中。你有什么建议吗?

我使用java和Apache Spark 1.6.2。

1 个答案:

答案 0 :(得分:0)

为什么你不是groupBy两列?

df.groupBy($"id", $"type").sum()