JAVA spark数据集中的GroupBy和聚合函数

Joh*_*yun 3 java group-by aggregate-functions apache-spark

我正在尝试对数据集进行以下操作以进行分组和聚合 Column expend 相加。但这不适用于它为 RelationalGroupedDataset 所说的普通数据集。如何在普通数据集中实现以下操作

dataset.select.(col("col1"),col("col2"),col("expend")).groupBy(col("col1"),col("col2"),col("expend")).agg(sum("expend"))
Run Code Online (Sandbox Code Playgroud)

SQL 查询看起来像 select col1,col2,SUM(expend) from table group by col1,col2

当我尝试此代码时,列会重复。 dataset.columns()给我[col1,col2,expend,expend] 的方法是对的吗?

Joh*_*yun 5

我用下面的代码来解决这个问题。创建了一个列表List<Column> aggCols; 这将有列的操作。在这里我添加为

aggCols.add(expr("sum(expend1)"));
addCols.add(expr("sum(expend2)"));

 dataset.select.(col("col1"),col("col2"),col("expend"))
.groupBy(col("col1"),col("col2"))
.agg(aggCols.get(0), JavaConverters.asScalaIteratorConverter(aggCols.subList(1,aggCols.size()).iterator()).asScala().toSeq());
Run Code Online (Sandbox Code Playgroud)

当我只有一个 col 可以求和时,我添加了一些检查,然后我直接求和。