【问题标题】:GroupBy and Aggregate Function In JAVA spark DatasetJAVA spark数据集中的GroupBy和聚合函数
【发布时间】: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) 这就是我想要的结果。

标签: java apache-spark group-by aggregate-functions


【解决方案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());

当我只有一个列要求和时,我添加了一些检查,然后我直接进行求和。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
相关资源
最近更新 更多