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

时间:2018-03-05 01:12:32

标签: java apache-spark-sql

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

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|

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

1 个答案:

答案 0 :(得分:0)

我已将数据集转换为JavaPairRDD<元组2<整数,整数>,Tuple2<双人间,双人间> >然后我使用了方法reduceByKey(x-> ...),其中...描述了所有逻辑。不漂亮,但它确实有效。