Python 减少火花操作

Python 减少火花操作,python,apache-spark,pyspark,reduce,Python,Apache Spark,Pyspark,Reduce,我试图用3个值来减少RDD,因此,首先,我用以下格式映射RDD a = mytable.rdd.map(lambda w: (w.id,(w.v1,w.v2,w.v3))) 然后在下一步中,我用下面的代码减少它 b = a.reduceByKey(lambda a,b,c: (a[0] +','+ a[1],b[0] +','+ b[1],c[0] +','+ c[1])) 但是,我得到一个错误,即: TypeError:()正好接受3个参数(给定2个) 我的目标是添加该rdd的所有值,例如

我试图用3个值来减少RDD,因此,首先,我用以下格式映射RDD

a = mytable.rdd.map(lambda w: (w.id,(w.v1,w.v2,w.v3)))
然后在下一步中,我用下面的代码减少它

b = a.reduceByKey(lambda a,b,c: (a[0] +','+ a[1],b[0] +','+ b[1],c[0] +','+ c[1]))
但是,我得到一个错误,即: TypeError:()正好接受3个参数(给定2个)

我的目标是添加该rdd的所有值,例如,如果我的rdd具有这些值:

[(id1, ('a','b','c')),(id1', ('e','f','g'))]
在reduce之后,我希望结果按以下顺序排列:

[(id1, ('a,d','b,e','c,f'))]

谢谢

最佳解决方案可以表示为:

a.groupByKey().mapValues(lambda vs: [",".join(v) for v in  zip(*vs)])
其中,initial
groupByKey
将数据分组到相当于以下内容的结构中:

('id1', [('a','b','c'), ('e','f','g')])
zip(*vs)
将值转换为:

[('a', 'e'), ('b', 'f'), ('c', 'g')]
join
连接每个元组

reduceByKey
在这里确实不是正确的选择(考虑复杂性),但一般来说,它需要两个参数的函数,所以
lambda,b,c:…
是不会做的。我相信你想要这样的东西:

lambda a, b: (a[0] + "," + b[0], a[1] + "," + b[1], a[2] + "," + b[2])

最佳解决方案可以表示为:

a.groupByKey().mapValues(lambda vs: [",".join(v) for v in  zip(*vs)])
其中,initial
groupByKey
将数据分组到相当于以下内容的结构中:

('id1', [('a','b','c'), ('e','f','g')])
zip(*vs)
将值转换为:

[('a', 'e'), ('b', 'f'), ('c', 'g')]
join
连接每个元组

reduceByKey
在这里确实不是正确的选择(考虑复杂性),但一般来说,它需要两个参数的函数,所以
lambda,b,c:…
是不会做的。我相信你想要这样的东西:

lambda a, b: (a[0] + "," + b[0], a[1] + "," + b[1], a[2] + "," + b[2])