Apache Spark SQL数据集groupBy具有max函数和另一列中的不同值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache Spark SQL数据集groupBy具有max函数和另一列中的不同值相关的知识,希望对你有一定的参考价值。

我有一个通过以下操作转换的数据集:

dataset.groupBy("userID", "itemID", "relevance")
    .agg(functions.max("value").as("value"));

结果我得到这样的数据集:

+------+------+-----+-------------------+
|userID|itemID|value|          relevance|
+------+------+-----+-------------------+
|     3|     1|  5.0| 0.2132007163556104|
|     3|     1|  5.0| 0.2132007163556104|
|     3|     2|  5.0| 0.1111111111111111|
|     3|     2|  5.0| 0.2222222222222222|
|     3|     3|  5.0| 0.3434343434343434|
|     3|     3|  1.0| 0.3434343434343434|
|     3|     4|  1.0| 0.5555555555555555|
|     3|     4|  5.0| 0.4999999999999994|

但考虑到必须选择MAX“相关性”,我需要改进我的查询以删除重复项。但是在“相关性”相等的情况下,必须选择MAX“值”。最后我应该得到这样的数据集:

+------+------+-----+-------------------+
|userID|itemID|value|          relevance|
+------+------+-----+-------------------+
|     3|     1|  5.0| 0.2132007163556104|
|     3|     2|  5.0| 0.2222222222222222|
|     3|     3|  5.0| 0.3434343434343434|
|     3|     4|  1.0| 0.5555555555555555|

抱歉有一个愚蠢而无聊的问题,但是有人可以帮我解决这个问题吗?

答案

我已经将数据集转换为JavaPairRDD <Tuple2 <Integer,Integer>,Tuple2 <Double,Double >>,然后我使用了方法reduceByKey(x-> ...),其中...描述了所有逻辑。不漂亮,但它的工作原理。

以上是关于Apache Spark SQL数据集groupBy具有max函数和另一列中的不同值的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark 使用 SQL 函数 nTile 对数据进行分区

使用 Scala 在 Apache Spark 中连接不同 RDD 的数据集

获取Apache Spark Java中的整个数据集或仅列的摘要

Spark:数据集中的四舍五入

从 org.apache.spark.sql.Dataset 转换为 CoordinateMatrix

Spark 数据集:示例:无法生成编码器问题