JAVA spark数据集中的GroupBy和聚合函数
Posted
技术标签:
【中文标题】JAVA spark数据集中的GroupBy和聚合函数【英文标题】:GroupBy and Aggregate Function In JAVA spark Dataset 【发布时间】:2018-01-04 10:20:14 【问题描述】:我正在尝试对数据集执行以下操作,以对列消耗进行分组和聚合以加起来。但这不适用于它为 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]
的方法对吗?
【问题讨论】:
能否提供错误信息? @ShankarKoirala 我得到了重复的 cols Shankar @ShankarKoirala 你想在这里加点什么吗? 您是否要对col1 and col2
进行分组并对expend
求和??
是的@ShankarKoirala 假设我有两行的数据(item1,item2,4,4)
和(item1,item2,5,5)
我希望它被分组为(item1,item2,9,9)
这就是我想要的结果。
【参考方案1】:
我使用下面的代码来解决这个问题。
创建了一个列表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());
当我只有一个列要求和时,我添加了一些检查,然后我直接进行求和。
【讨论】:
任何建议如何处理这个 UDF ***.com/questions/63935600/…以上是关于JAVA spark数据集中的GroupBy和聚合函数的主要内容,如果未能解决你的问题,请参考以下文章
Spark Dataframe GroupBy 和计算复杂聚合函数
Spark(scala):groupby和聚合值列表到一个基于索引的列表[重复]
在 groupby 之后将 Spark DataFrame 的行聚合到 String