是否可以使用reduceByKey:reduceByKey((x, y, z) => ...)
?
因为我有一个RDD:
RDD[((String, String, Double), (Double, Double, scala.collection.immutable.Map[String,Double]))]
我希望按键减少,我尝试了这个操作:
reduceByKey((x, y, z) => (x._1 + y._1 + z._1, x._2 + y._2 + z._2, (((x._3)++y._3)++z._3)))
它显示了一条错误消息:missing parameter type
在我测试两个元素并且它有效之前,但有3个我真的不知道哪个是我的错误。这样做的方法是什么?
答案 0 :(得分:2)
以下是您遗失的内容,reduceByKey
告诉您,您有一个键值配对。从概念上讲,一对中只能有2个项目,它是成对的一部分。因此,reduceByKey
的完整签名只能是2-Tuple的签名。所以,不,你不能直接拥有arity 3的功能,只有arity 2的功能。
以下是我如何处理您的情况:
reduceByKey((key,value) =>
val (one, two, three) = key
val (dub1, dub2, nameName) = value
// rest of work
}
但是,让我提一个轻微的建议?使用case class
作为您的价值。它更容易理解,基本上相当于你的3元组。
答案 1 :(得分:0)
如果在PairRDDFunctions上看到reduceByKey函数,它看起来像是
def reduceByKey(func: (V, V) => V): RDD[(K, V)]