rdd.collect().size將首先將所有資料移動到驅動程式,如果資料集很大,它可能會導致 OutOfMemoryError。
那么,我們應該總是使用它rdd.count()嗎?
或者換句話說,在什么情況下,人們會更喜歡rdd.collect().size?
uj5u.com熱心網友回復:
collect導致資料被處理,然后被提取到驅動程式節點。
因為count你不需要:
完全處理 - 可能不需要獲取或計算某些列,例如不包含在任何過濾器中。您無需加載、處理或傳輸不影響計數的列。
獲取到驅動節點 - 每個作業節點可以計算它的行??數并且可以總結計數。
我看不出打電話的理由collect().size。
僅出于一般知識,還有另一種繞過#2的方法,但是,對于這種情況,它是多余的并且不會阻止#1:rdd.forEachPartition(p => p.size).agg(r => r.sum())
uj5u.com熱心網友回復:
假設您在size回傳的陣列上使用 Scala 函式,rdd.collect()我看不到收集整個 RDD 只是為了獲取其行數的任何優勢。
這就是 RDD 的重點,它可以并行處理資料塊以使轉換易于管理。通常結果小于原始資料集,因為給定的資料以某種方式被轉換/過濾/合成。
collect通常在資料處理結束時出現,如果您運行某個操作,您可能還希望保存資料,因為可能需要一些昂貴的計算,并且收集的資料可能很有趣/有價值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/472153.html
標籤:阿帕奇火花
