2016-08-01 111 views
0

我有一个RDD每行具有以下结构:如何计算列表中的项目数在RDD

[(id,[listItem,listItem,ListItem])] 

我不得不通过整个RDD和计数的列表项的数量。我已经试过这样的事情:

theCount = 0 
theRDD.foreach(lambda x: theCount = theCount + x[1].count()) 
return theCount 

但是Python并不让我lambda函数内的值赋给theCount。有谁知道如何做到这一点?

回答

1

像这样的东西?

sc.parallelize([('id', [1, 2, 3])]).map(lambda tup: (tup[0], len(tup[1]))).collect() 

输出

[('id', 3)] 

星火不会在将作业发送局部变量,在整个集群(即使一个单一的,本地节点上运行)。这就是你拥有的语法不可能的原因。

+0

这是伟大的!但是,我如何总结第二列的值来检索所有列表的总和? –

+0

听起来像是一个第二个问题,你应该在接受这个问题后创建一个新帖子,因为它回答了问题。评论是澄清什么是张贴,而不是“谢谢”,或“如果我想要...” –

+0

对不起,我想我明确了在构建这个问题时。这里是链接到这个问题的第二部分: [链接](http://stackoverflow.com/questions/38705596/how-to-sum-values-of-column-within-rdd) –

0

也许,

from operator import add 

lst = [1,3,5,7,9] 
print("{}".format(len(lst))) 

ps_lst = sc.parallelize(lst) 
print("{}".format(ps_lst.map(lambda x: 1).reduce(add)))