如何使用pyspark

时间:2016-11-18 21:31:21

标签: python for-loop pyspark

我在项目中使用spark和python3时遇到了问题。在键值对中,如('1','+1 2,3'),部分"2,3"是我想要检查的内容。所以我写了下面的代码:
(假设此键值对保存在名为p_list的RDD中)

def add_label(x):   
    label=x[1].split()[0]  
    value=x[1].split()[1].split(",")  
    for i in value:     
        return (i,label)  
p_list=p_list.map(add_label)

完成后,我只能得到结果:('2','+1'),它应该是('2','+1')('3','+1')。似乎地图操作中的“for”循环只做了一次。我怎么能让它做多次?或者有没有其他方法可以用来实现像地图操作中的“for”循环或减少操作这样的功能?

我想提一下我真正处理的是一个大型数据集。所以我必须使用AWS集群并使用并行化实现循环。集群中的从节点似乎不了解循环。如何通过Spark RDD功能让他们知道?或者如何以另一种管道方式(这是Spark RDD的主要设计之一)进行这样的循环操作?

1 个答案:

答案 0 :(得分:1)

你的return语句不能在循环中;否则,它在第一次迭代后返回,永远不会进入第二次迭代。

你可以尝试的是这个

result = []
for i in value:
    result.append((i,label))
return result

然后result将是循环内创建的所有元组的列表。