2016-03-16 62 views
0

最近,一位僱主問我一個問題,我們該如何防止Apache Spark轉型的懶惰。我知道我們可以堅持並緩存RDD數據集,但是如果發生故障,它會從父級重新計算。我們能否防止Apache Spark轉型的懶惰?

任何人都可以請解釋我,是否有任何功能來阻止Spark轉換的懶惰?

回答

0

在設計上,星火轉換是懶惰的,你必須按順序檢索出它們的具體值,使用動作

例如,下面的轉換將始終保持懶:

JavaRDD<String> lines = sc.textFile("data.txt"); 
JavaRDD<Integer> lineLengths = lines.map(s -> s.length()); 

功能類似於map回報RDDS,你只能通過執行以下動作將這些RDDS成真正的價值,如reduce

int totalLength = lineLengths.reduce((a, b) -> a + b); 

沒有會使map返回具體值(例如,整數列表)的標誌。

底線是,你可以用collect或任何其他星火行動「防止懶惰」的轉換的:

JavaRDD<String> lines = sc.textFile("data.txt"); 
JavaRDD<Integer> lineLengths = lines.map(s -> s.length()); 
List<Integer> collectedLengths = lineLengths.collect() 

但要記住,在大型數據集採用collect可能會是一個非常糟糕的做法,使您的驅動程序內存不足。

+1

很好的回答。這意味着我們無法阻止火花轉型的懶惰,直到行動被調用。 – Souvik

+0

謝謝,請標記爲答案(綠色V) – imriqwe