Spark(JAVA) - 数据帧组有多个聚合?

时间:2016-07-15 12:33:52

标签: java apache-spark

我正在尝试使用JAVA在Spark上编写一个groupBy。在SQL中,这看起来像

SELECT id, count(id) as count, max(date) maxdate
FROM table
GROUP BY id;

但是这个查询的Spark / JAVA样式是什么?假设变量table是一个数据帧,以查看与SQL查询的关系。我想的是:

table = table.select(table.col("id"), (table.col("id").count()).as("count"), (table.col("date").max()).as("maxdate")).groupby("id")

这显然是不正确的,因为您不能在列上使用.count.max等聚合函数,只能使用数据框。那么如何在Spark JAVA中完成呢?

谢谢!

1 个答案:

答案 0 :(得分:16)

您可以使用org.apache.spark.sql.functions执行此操作:

import org.apache.spark.sql.functions;

table.groupBy("id").agg(
    functions.count("id").as("count"),
    functions.max("date").as("maxdate")
).show();