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中的整个数据集或仅列的摘要