spark中的reduceByKey用于添加元组



考虑以下数据集的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'])

相关内容

  • 没有找到相关文章

最新更新