2017-05-01 42 views
-1

類型變量origin的是pyspark.rdd.PipelinedRDD,並origin包含類似:在pyspark查找字謎

[u'masquerade', 
u'squaremade', 
u'dianas', 
u'naiads', 
u'antagonist', 
u'stagnation', 
u'bates', 
u'beast', 
u'beats', 
u'thanks'] 

我想通過鍵排序鍵和所有的字謎:

[(u'aadeemqrsu', {u'masquerade', u'squaremade'}), 
(u'aadins', {u'dianas', u'naiads'}), 
(u'aaginnostt', {u'antagonist', u'stagnation'}), ... 
(u'abest', {u'bates', u'beast', u'beats'}), ...] 

我知道可能需要mapreducebykey函數,但我真的不知道該怎麼做。

回答

1

首先,你需要定義一個RDD:

origin = [u'masquerade', 
    u'squaremade', 
    u'dianas', 
    u'naiads', 
    u'antagonist', 
    u'stagnation', 
    u'bates', 
    u'beast', 
    u'beats', 
    u'thanks'] 

origin_rdd = sc.parallelize(origin) 

你可以打印看到的結果:

print origin_rdd.take(10) 

現在將其轉換爲鍵值對:

origin_kv = origin_rdd.map(lambda word: ("".join(sorted([letter for letter in word])),[word])) 

做減:

res = origin_kv.reduceByKey(lambda word1,word2: word1 + word2) 

可以打印結果:

print res.take(10) 

如果需要還的鑰匙進行排序,你必須在驅動程序中的所有數據足夠的空間,你可以排序的結果:

print sorted(res.take(10))