2015-11-05 15 views
0

給定的輸入RDD或形式如何映射每行獲得多輸出RDD

1: 6 7 
2: 5 

我怎樣才能形式的另一個RDD

1 6 
1 7 
2 5 

等..

+0

這仍然不能告訴我們輸入是什麼樣的數據結構,以及你如何處理它。例如,它是一個字典(什麼是鍵和值)?或者它是一個文本文件?或者它是一個字符串?或... – inspectorG4dget

+0

它實際上是一個RDD。但是字典的邏輯也可以適用於RDD – mhn

+0

[flatMap引發錯誤-unicode項可能有重複項沒有屬性flatMap](http://stackoverflow.com/questions/33540559/flatmap-throws-error-unicode -item-does-not-have-attribute-flatmap) – zero323

回答

1

如果我假設你的初始輸入是在一個文本文件中,那麼你可以調用兩個這樣的地圖函數:

data = sc.textFile("textfile_location") 
data = data.map(lambda line: (line.split(":")[0], line.split(":")[1].split())) 
data = data.flatMap(lambda key, values: [(key, value) for value in values]) 
1

我對RDD的工作原理並不十分清楚,但你說它可以變成dict。所以我們可以說,你有以下字典:

d = {1: [6, 7], 2: [5]} 

而且假設你想寫一個信息到一個文件:

1 6 
1 7 
2 5 

這是可以實現如下:

with open('path/to/output', 'w') as outfile: 
    for k in sorted(d): 
     for v in d[k]: 
      outfile.write("{}\t{}\n".format(k, v)) 
+0

可以使用lambda表達式來完成 – mhn

+0

@mhn:使用lambda表達式可以做什麼?我想要用lambda替換哪部分代碼? – inspectorG4dget