2016-01-21 48 views
0
的RDD

我有一個包含HBase行密鑰的RDD。 RDD相對較大以適應內存。我需要爲每個提供的密鑰獲取值的RDD。有沒有辦法做到這樣的事情:Spark:將HBase行密鑰的RDD映射到值爲

keys.map(key => table.get(new Get(key))) 

所以問題是我如何獲得一個HTable內部地圖任務的實例?我是否應該爲每個分區實例化一個HConnection,然後從中獲取HTable實例,還是有更好的方法?

回答

0

有幾個選項可以做,但首先要考慮的事實是,火花而不是允許您創建RDD的RDD。所以真的是讓你有兩個選項

  1. RDDS列表
  2. 鍵/值RDD

我會極力推薦的第二個作爲RDDS列表可以與您需要結束執行很多減少操作,這可能會大量增加您需要執行的洗牌次數。考慮到這一點,我會建議你使用flatMap。

因此,這裏是一些基本的骨架代碼,可以讓你的結果

val input:RDD[String] 
val completedRequests:RDD[(String, List[String]) = input.map(a => (a, table.get(new Get(a))) 
val flattenedRequests:RDD[(String, String) = completedRequests.flatMap{ case(k,v) => v.map(b =>(k,b)) 

現在,您可以處理RDD作爲一個對象,reduceByKey如果你有某一特定信息你需要它,現在spark將能夠以最佳並行性訪問數據。

希望有幫助!

+0

謝謝,但我的意思是不同的:問題是關於在地圖任務中獲取HTable實例。我已經編輯了我的問題以進行澄清。 –

相關問題