我有一个平面图,该平面图返回序列Seq((20,6),(22,6),(23,6),(24,6),(20,1),(22,1))
,现在我需要对从平面图获得的序列使用reduceByKey()
来找到每个键的最小值。
我尝试使用.reduceByKey(a,min(b))
和.reduceByKey((a, b) => if (a._1 < b._1) a else b)
,但它们都不起作用。
这是我的代码
for(i<- 1 to 5){
var graph=graph.flatMap{ in => in match{ case (x, y, zs) => (x, y) :: zs.map(z => (z, y))}
.reduceByKey((a, b) => if (a._1 < b._1) a else b)
}
对于平面图生成的每个不同键,我需要获取该键的最小值。例如:平面图生成Seq((20,6),(22,6),(23,6),(24,6),(20,1),(22,1)),resultByKey()应该生成( 20,1),(22,1),(23,6),(24,6)
答案 0 :(得分:0)
以下是reduceByKey
的签名:
def reduceByKey(func: (V, V) ⇒ V): RDD[(K, V)]
基本上,给定键/值对的RDD,您需要提供一个将两个值(而不是整个对)减少为一个的函数。因此,您可以按以下方式使用它:
val rdd = sc.parallelize(Seq((20,6),(22,6),(23,6),(24,6),(20,1),(22,1)))
val result = rdd.reduceByKey((a, b) => if (a < b) a else b)
result.collect
// Array[(Int, Int)] = Array((24,6), (20,1), (22,1), (23,6))