0
最近,一位僱主問我一個問題,我們該如何防止Apache Spark轉型的懶惰。我知道我們可以堅持並緩存RDD數據集,但是如果發生故障,它會從父級重新計算。我們能否防止Apache Spark轉型的懶惰?
任何人都可以請解釋我,是否有任何功能來阻止Spark轉換的懶惰?
最近,一位僱主問我一個問題,我們該如何防止Apache Spark轉型的懶惰。我知道我們可以堅持並緩存RDD數據集,但是如果發生故障,它會從父級重新計算。我們能否防止Apache Spark轉型的懶惰?
任何人都可以請解釋我,是否有任何功能來阻止Spark轉換的懶惰?
在設計上,星火轉換是懶惰的,你必須按順序檢索出它們的具體值,使用動作。
例如,下面的轉換將始終保持懶:
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
可能會是一個非常糟糕的做法,使您的驅動程序內存不足。
很好的回答。這意味着我們無法阻止火花轉型的懶惰,直到行動被調用。 – Souvik
謝謝,請標記爲答案(綠色V) – imriqwe