使用scala和spark在多维元组上使用ReduceByKey

时间:2016-01-19 11:53:40

标签: scala apache-spark spark-streaming reducers

尝试使用scala在multidimensional列表上reduceByKey,以便将元组附加到父元组,从而生成多维元组。

在python中,我试图按如下方式附加到多维列表,它完美地运行:

.map(lambda z:(z[1][0][1],[[z[1][0][1],str(z[1][0][2]),str(z[1][0][3]),z[1][0][0].strftime('%Y-%m-%dT%H:%M:%SZ'),z[1][1]]])).reduceByKey(lambda a,b:a+b)

但是在scala我无法使用reduceByKey,我正在尝试:

.map(t => (t._2._1._2,((t._2._1._2,t._2._1._3,t._2._1._4,t._2._1._1,t._2._2)))).reduceByKey(t,y => t++y)

也欢迎任何正确方向的提示!

1 个答案:

答案 0 :(得分:2)

与Python Tuple*不同,Scala tuple不是集合。这是一个Product。从技术上讲,它代表了可能异构的价值集的n倍笛卡尔积。 Scala Tuples不能连接,不能包含超过22个元素。

如果您想收集每个键的值,您应该使用某种类型的集合,甚至更好groupByKey

另请参阅:How should I think about Scala's Product classes?