2017-05-06 43 views
0

我在pyspark以下RDD,我相信这应该是很简单的事,但一直没能弄明白:pyspark RDD扩大一行到多行

information = [ (10, 'sentence number one'), 
       (17, 'longer sentence number two') ] 

rdd = sc.parallelize(information) 

我需要申请,轮流说RDD这个转型:

[ ('sentence', 10), 
    ('number', 10), 
    ('one', 10), 
    ('longer', 17), 
    ('sentence', 17), 
    ('number', 17), 
    ('two', 17) ] 

基本上扩大了一句关键的,与字作为键多行。

我想避免SQL。

回答

3

使用flatMap

rdd.flatMap(lambda x: [(w, x[0]) for w in x[1].split()]) 

rdd.flatMap(lambda x: [(w, x[0]) for w in x[1].split()]).collect() 
# [('sentence', 10), ('number', 10), ('one', 10), ('longer', 17), ('sentence', 17), ('number', 17), ('two', 17)] 
+1

外观极好!简短,简单,可以理解! – Franch