python – 如何在“pyspark”中迭代特定结果的列表列表

我是PySpark的新手,我想知道如何做到这一点.任何帮助赞赏.

我有这个RDD例如:

[[u'merit', u'release', u'appearance'], [u'www.bonsai.wbff.org'], [u'whitepages.com'], [u'the', u'childs', u'wonderland', u'company'], [u'lottery']]

我试着:

[[(u'merit',1), (u'release',1), (u'appearance',1)], [(u'www.bonsai.wbff.org',1)], [(u'whitepages.com',1)], [(u'the',1), (u'childs',1), (u'wonderland',1), (u'company',1)], [(u'lottery',1)]] 

但是我已经尝试了,它得到了这个结果:

[[u'merit', u'release', u'appearance',1], [u'www.bonsai.wbff.org',1], [u'whitepages.com',1], [u'the', u'childs', u'wonderland', u'company',1], [u'lottery',1]]

或这些错误:

> TypeError:’PipelinedRDD’对象不可迭代
> AttributeError:’list’对象没有属性’foreach’ – 或者split,take等.

我试过这个:

rdd1=rdd.map(lambda r : (r,1))  

我有第一个结果:

[u'merit', u'release', u'appearance',1], [u'www.bonsai.wbff.org',1], [u'whitepages.com',1], [u'the', u'childs', u'wonderland', u'company',1], [u'lottery',1]]

rdd1=rdd.map(lambda r : (r[:][0],1))  

它只是每行中的第一个单词,它不是我想要的

for row in rdd.collect() : row.foreach(lambda x : (x,1)) 
# AttributeError: 'list' object has no attribute 'foreach'
rdd3.take(100).foreach( lambda a : (a.foreach( lambda e : print(e,1)))) 
# AttributeError: 'list' object has no attribute 'foreach'

解决方法:

要打印收集并在本地迭代:

for xs in rdd3.take(100):
    for x in xs:
        print(x)

一般迭代:

rdd.flatMap(lambda xs: [(x, 1) for x in xs])
上一篇:python – pyspark reduce方法的歧义


下一篇:如何在Spark中关闭INFO日志记录?