Scala 指定值元素上的ReduceByKey
刚接触Spark并试图理解被指定接受RDD[(K,V)]的reduceByKey。我不清楚的是,当值是列表/元组时,如何应用此函数 在各种映射和筛选操作之后,我的RDD以Scala 指定值元素上的ReduceByKey,scala,apache-spark,Scala,Apache Spark,刚接触Spark并试图理解被指定接受RDD[(K,V)]的reduceByKey。我不清楚的是,当值是列表/元组时,如何应用此函数 在各种映射和筛选操作之后,我的RDD以(Cluster:String,(Unique_ID:String,Count:Int))的形式结束,其中我可以拥有属于同一集群的许多元素,例如: Array((a,(lkn,12)), (a,(hdha,2)), (a,(naa,35)), (b, (cdas,20)) ...) 现在我想使用reduceByKey为每个集
(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))
如果使用reduceByKey
和math.max
的简单(键、值)对,我可以找出如何找到每个集群的最大值。但当值表示值的列表/元组时,我不理解如何扩展它
我在这里使用了错误的功能吗?您可以:
rdd.reduceByKey { case (x, y) => if (x._2 > y._2) x else y }
这:
- 以逻辑方式将数据划分为键定义的组(
)。\u 1
- “a”的键:
(a,[(lkn,12),(hdha,2),(naa,35),…])
- “b”的键:
(b,[(cdas,20),…])
- “a”的键:
- 通过比较值的第二个元素(
)来减少每组中的值,并返回一个数值较大的值(x.\u 2>y.\u 2)
RDD
OP,它似乎被reduceBy
的一般机制和如何在集合中使用lamdas弄糊涂了——解释你的代码片段或提供一个资源来解释它是如何工作的可能很有用谢谢,我想我现在明白了。@LostInOverflow看起来很棒