2017-05-06 78 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