2017-07-12 56 views
0

我正在使用Python在RDD中工作。我想從這個RDD如何使用Python從RDD獲取特定記錄

(8, 23, 4.0) 
(50, 21, 3.0) 
(5, 48, 3.0) 
(5, 85, 3.0) 
(40, 17, 3.0) 
(3, 62, 3.0) 
(24, 92, 3.0) 
(48, 24, 3.0) 
(48, 73, 3.0) 
(34, 48, 3.0)  
(50, 14, 3.0) 
(1, 78, 3.0) 
(7, 8, 3.0) 
(10, 87, 3.0) 
(14, 82, 3.0) 

對於實例找到一個特定的記錄:我想找到第3個值時1st is 32nd is 62,所以它應該返回3.0。元組是(3,62,3.0),從RDD頂部開始第6位

由於我是Spark和Python的初學者,我不知道使用了正確的術語。我沒有得到如何使用過濾器或地圖功能或使用哪一個。

+0

過濾器會減少您的數據集,並且映射將在所有行上應用一個函數。映射不會給你一個記錄。請顯示您的過濾嘗試 –

回答

2

我想找到3個值時,第一次是3和2的62

你給您的具體要求,而你似乎知道有關地圖和過濾功能,所以剩下的只是一個理解常規python元組解包和lambda函數。

reduced_rdd = rdd.filter(lambda x: x[0] == 3 and x[1] == 62)\ 
    .map(lambda x: x[2]) 
+0

非常感謝!這工作很好:) – Yogesh

1

,其中第一個值是3和第二個62這將返回所有值:

records = [(8, 23, 4.0) 
(50, 21, 3.0) 
(5, 48, 3.0) 
(5, 85, 3.0) 
(40, 17, 3.0) 
(3, 62, 3.0) 
(24, 92, 3.0) 
(48, 24, 3.0) 
(48, 73, 3.0) 
(34, 48, 3.0)  
(50, 14, 3.0) 
(1, 78, 3.0) 
(7, 8, 3.0) 
(10, 87, 3.0) 
(14, 82, 3.0)] 

rdd = sc.parallelize(records) 
rdd.filter(lambda x: x[0] == 3 and x[1] == 63) 
rdd.map(lambda x: (x[2],)) 

filter()你可以設置它記錄你想保持。 在map()中,您可以更改將包含的內容。

+0

嘿阿加塔,感謝了很多走得更遠。目前,RDD具有獨特的組合,但這非常有用,可能有助於未來的某些實施。 – Yogesh

+0

你爲什麼要調用'.collect()'? –

相關問題