Spark的新手并试图了解reduceByKey
,它被指定接受RDD [(K,V)]。当值是列表/元组时,我不清楚如何应用此函数...
在各种映射和过滤操作之后,我的RDD以(Cluster:String, (Unique_ID:String, Count:Int))
的形式结束,其中我可以有许多属于同一群集的元素,例如:
Array((a,(lkn,12)), (a,(hdha,2)), (a,(naa,35)), (b, (cdas,20)) ...)
现在我想使用reduceByKey
为每个群集找到具有最高计数的元素(每个群集一个条目)。在上面的示例中,对于群集(a,(naa,35))
,这将是a
。
如果我有reduceByKey
和math.max
的简单(键,值)对,我可以弄清楚如何找到每个群集的最大值。但是,当值表示值的列表/元组时,我不明白如何扩展它。
我在这里使用了错误的功能吗?
答案 0 :(得分:3)
你可以:
rdd.reduceByKey { case (x, y) => if (x._2 > y._2) x else y }
此:
将数据逻辑分区为由密钥(_._1
)
(a, [(lkn,12), (hdha,2), (naa,35), ...])
(b, [(cdas,20), ...])
通过比较值的第二个元素((x._2 > y._2)
)来减少每个组中的值,并返回一个具有更高数字的值。