【问题标题】:ReduceByKey on specified value element指定值元素上的 ReduceByKey
【发布时间】:2017-04-05 03:22:25
【问题描述】:

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,这将是 (a,(naa,35))

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

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

【问题讨论】:

标签: scala apache-spark


【解决方案1】:

你可以:

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)) 减少每组中的值,并返回具有较大数字的一个。

【讨论】:

  • OP 似乎对reduceBy 的一般机制以及如何在集合上使用 lamdas 感到困惑——解释您的代码 sn-p 或提供解释其工作原理的资源可能很有用
  • 谢谢,我想我现在明白了。
  • @LostInOverflow 看起来很棒
猜你喜欢
  • 2016-12-30
  • 2016-12-27
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 2017-08-31
相关资源
最近更新 更多