2017-05-06 2 views
0

Ich habe folgendes RDD in pyspark und ich glaube, das ist wirklich einfach sein sollte zu tun, aber nicht in der Lage, es herauszufinden:pyspark RDD eine Zeile in mehreren Zeilen erweitert

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

rdd = sc.parallelize(information) 

ich anwenden müssen eine Transformation, die das RDD in diesen verwandelt:

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

Grundsätzlich einen Satz Schlüssel in mehrere Zeilen mit den Worten als Schlüssel erweitern.

Ich möchte SQL vermeiden.

Antwort

3

Verwendung flatMap:

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

Beispiel:

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

Excelent! Kurz, einfach, verständlich! – Franch