用于添加元组的spark中的reduceByKey

时间:2016-09-01 13:34:39

标签: python apache-spark pyspark apache-spark-sql

考虑使用以下数据集的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。我可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想在第一个元组中总结数字并使用逻辑或在第二个元素中?

我认为你应该重写你的功能如下:

<h3>Facebook</h3>
<ul>
    {{#each model.facebookFeedObjects as |obj|}}
        <li>      
            <h4>{{obj.message}}</h4>
            <ul>
                {{#each obj.comments as |comment|}}
                    <li>{{comment}}</li>
                {{/each}}
            </ul>
        </li>
    {{/each}}
</ul>

然后你可以像这样使用它:

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)