2015-06-05 32 views
1

我需要獲取轉換爲RDD的數據幀的兩列的值。什麼是最有效的方式獲取火花的RDD元素

我已經想好了第一個解決方案是,

  • 首先轉換RDD到列表行RDD.collect()
  • 然後列表中的每個元素,通過使用Row[i].getInt(column_index)

這個解決方案中獲得價值適用於中小型數據。但在大一,我得到了over memory

我的臨時解決方案是我只創建newRDD,其中只包含兩列而不是所有列。然後,在上面應用我的解決方案,這可能會減少大部分所需的內存。

當前實現是這樣的:

Row[] rows = sparkDataFrame.collect(); 
for (int i = 0; i < rows.length; i++) { //about 50 million rows 
    int yTrue = rows[i].getInt(0); 
    int yPredict = rows[i].getInt(1); 
} 

你能幫我提高我的解決方案,或者給我建議其他的解決方案!

謝謝!

ps:我是新火花的用戶!

回答

0

首先你將你的大型RDD轉換成Dataframe,然後直接選擇你需要的任何列。

// Create the DataFrame 
DataFrame df = sqlContext.jsonFile("examples/src/main/resources/people.json"); 

// Select only the "name" column 
df.select(df.col("name"), df.col("age")).show(); 

更多的細節,你可以按照這個link

+0

ü意味着,創造新的df是更有效的不是創建新RDD? –

+0

如何使用「foreach」 - 我的朋友推薦! –

+0

它取決於您的使用情況,如果您想要進行更多轉換(如某些聚合),或者您希望在單獨的RDD中使用不同的不同列,則可以使用'DataFrame'。 或者,您可以使用地圖功能從RDD中提取這些列,然後收集它。 – Kaushal