我在项目中使用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的主要设计之一)进行这样的循环操作?
答案 0 :(得分:1)
你的return语句不能在循环中;否则,它在第一次迭代后返回,永远不会进入第二次迭代。
你可以尝试的是这个
result = []
for i in value:
result.append((i,label))
return result
然后result
将是循环内创建的所有元组的列表。