我正在尝试对数据集进行以下操作,以对列支出进行分组和汇总以加总。但这不适用于为RelationalGroupedDataset表示的普通数据集。如何在普通数据集中实现以下操作
dataset.select.(col("col1"),col("col2"),col("expend")).groupBy(col("col1"),col("col2"),col("expend")).agg(sum("expend"))
SQL查询看起来像
select col1,col2,SUM(expend) from table group by col1,col2
当我尝试此代码时,列会重复出现。
dataset.columns()
给我[col1,col2,expend,expend]
是正确的方法吗? 最佳答案
我用下面的代码来解决这个问题。
创建了一个列表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());
当我只有一个列的总和时,我添加了一些检查,然后直接进行总和。