指定值元素上的ReduceByKey

时间:2016-11-21 16:41:20

标签: scala apache-spark

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

如果我有reduceByKeymath.max的简单(键,值)对,我可以弄清楚如何找到每个群集的最大值。但是,当值表示值的列表/元组时,我不明白如何扩展它。

我在这里使用了错误的功能吗?

1 个答案:

答案 0 :(得分:3)

你可以:

rdd.reduceByKey { case (x, y) => if (x._2 > y._2) x else y }

此:

  • 将数据逻辑分区为由密钥(_._1

    定义的组
    • " a":(a, [(lkn,12), (hdha,2), (naa,35), ...])
    • 的键
    • " b":(b, [(cdas,20), ...])
    • 的键
  • 通过比较值的第二个元素((x._2 > y._2))来减少每个组中的值,并返回一个具有更高数字的值。