2017-02-23 51 views
0

考慮兩種方案:使用RDD轉型成爲一個行動之前轉換爲數據集VS使用DataSet和它的API

A)如果我有一個RDD和各種RDD轉換是調用它,和前任何操作都完成我從它創建一個數據集。

B)我在一開始就創建了一個Dataset,並在其上調用了各種Dataset方法。

問題:如果這兩種情況產生邏輯上是相同的結果 - 做這兩種情況下通過雲 - 一個採用RDD改造,並將其轉換爲數據集的動作VS只是用數據集及其改造前右相同的優化?

回答

1

不,他們沒有。

當您對它們執行RDD和RDD轉換時,不會進行優化。當您最終將其轉換爲數據集時,然後才轉換爲基於鎢的表示(其佔用較少的內存並且不需要通過垃圾收集)。

當您從頭開始使用數據集時,它將從頭開始使用基於鎢的內存表示。這意味着它將佔用更少的內存,洗牌將更小更快,並且不會發生GC開銷(儘管使用任何時間類型化操作都會發生從內部表示到案例類別的轉換並返回)。如果您對數據集使用數據幀操作,那麼它也可能利用代碼gen和催化劑優化。

另請參閱我的答案:Do I have to explicitly use Dataframe's methods to take advantage of Dataset's optimization?

0

他們沒有。 RDD API不使用任何Tungsten/Catalyst優化,並且等效邏輯不相關。