火花数据集分组和总和

Posted

技术标签:

【中文标题】火花数据集分组和总和【英文标题】:spark dataset group by and sum 【发布时间】:2017-11-24 16:15:09 【问题描述】:

我使用 Spark 1.6.1 和 Java 作为编程语言。 以下代码在 dataframes 上运行良好:

simpleProf.groupBy(col("col1"), col("col2") )
                .agg(
                     sum("CURRENT_MONTH"),
                     sum("PREVIOUS_MONTH")
                );

但是,它不使用 数据集,知道如何在 Java/Spark 中对数据集执行相同的操作吗?

干杯

【问题讨论】:

你能发布你的代码不起作用吗?这应该可以工作,所以这取决于你如何尝试这样做。 在我的情况下它也有效。你能粘贴你的异常吗? 您能否详细说明“它不使用数据集”?你怎么知道它在使用数据集时不起作用?是什么输出让您如此相信? 它不起作用,因为在 groupBy 之后我得到一个 GroupedDataset 对象并且当我尝试应用函数 agg 它需要 typedColumn 而不是 column。 【参考方案1】:

它不起作用,因为在 groupBy 之后我得到一个 GroupedDataset 对象,当我尝试应用函数 agg 时,它需要 typedColumn 而不是 column。

啊,由于 Spark 2.x 中 Dataset 和 DataFrame 的合并,对此存在一些混淆,其中有一个 groupBy 可用于关系列,groupByKey 可用于类型列。因此,假设您在 1.6 中使用显式数据集,那么解决方案是通过 .as 方法对列进行典型化。

sum("CURRENT_MONTH").as[Int]

【讨论】:

以上是关于火花数据集分组和总和的主要内容,如果未能解决你的问题,请参考以下文章

在火花中加入大小不等的数据集

火花数据集的转换

不同的总和和分组依据

加入复杂条件的火花数据集

如何在不转换为火花数据集的情况下遍历数据框?

如何在火花中遍历数据集列?