spark + python + filter问题

时间:2017-10-28 15:53:50

标签: python apache-spark filter word-count

感谢有人可以了解以下代码段问题

lineStr= sc.textFile("/input/words.txt")
print (lineStr.collect())
['this file is created to count the no of texts', 'other wise i am just doing fine', 'lets see the output is there']

wc = lineStr.flatMap(lambda l: l.split(" ")).map(lambda x: (x,1)).reduceByKey(lambda w,c: w+c)
print (wc.glom().collect())
[[('this', 1), ('there', 1), ('i', 1), ('texts', 1), ('just', 1), ('fine', 1), ('is', 2), ('other', 1), ('created', 1), ('count', 1), ('of', 1), ('am', 1), ('no', 1), ('output', 1)], [('lets', 1), ('see', 1), ('the', 2), ('file', 1), ('doing', 1), ('wise', 1), ('to', 1)]]

现在,当我尝试使用以下过滤上述数据集的计数值大于1时,我收到错误

s = wc.filter(lambda a,b:b>1)
print (s.collect())
  

错误:vs = list(itertools.islice(iterator,batch))

     

TypeError :()缺少1个必需的位置参数:'b'

1 个答案:

答案 0 :(得分:1)

你不能在lambda函数中解包一个元组,lambda a, b:表示一个带有两个参数的函数,而不是一个以元组作为参数的函数:

一个简单的解决方法是使用单个参数捕获元素,然后使用index访问元组中的第二个元素:

wc.filter(lambda t: t[1] > 1).collect()
# [('is', 2), ('the', 2)]