考虑以下数据集的Rdd其中10000241为键,其余为值
('10000241',([0,0,1],[None,None,'RX']))
('10000241',([0,2,0],[None,'RX','RX']))
('10000241',([3,0,0],['RX',None,None]))
pv1 = rdd.reduceBykey(lambda x,y :(
addtup(x[0],y[0]),
addtup(x[1],y[1]),
))
def addtup(t1,t2):
j =()
for k,v in enumerate(t1):
j = j + (t1[k] + t2[k],)
return j
我想要的最终输出是(10000241,(3,2,1)('RX','RX','RX))但我得到的错误不能添加无类型到无类型或无类型到Str .我怎么能克服这个问题?
如果我理解正确的话,您想在第一个元组中总结数字并使用逻辑还是在第二个元组中?
我认为你应该这样重写你的函数:
def addtup(t1,t2):
left = list(map(lambda x: sum(x), zip(t1[0], t2[0])))
right = list(map(lambda x: x[0] or x[1], zip(t1[1], t2[1])))
return (left, right)
那么你可以这样使用:
rdd.reduceBykey(addtup)
这里有一个演示
import functools
data = (([0,0,1],[None,None,'RX']),
([0,2,0],[None,'RX','RX']),
([3,0,0],['RX',None,None]))
functools.reduce(addtup, data)
#=> ([3, 2, 1], ['RX', 'RX', 'RX'])