我在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。
答案 0 :(得分:5)
使用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)]