我正在尝试使用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中完成呢?
谢谢!
答案 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();