2017-02-23 52 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优化,并且等效逻辑不相关。