考虑两种情况:
A)如果我有一个RDD,并且在其上调用了各种RDD转换,并且在完成任何操作之前,我会从中创建一个数据集。
B)我在一开始就创建了一个数据集,并在其上调用了各种数据集方法。
问题:如果两个方案在逻辑上产生相同的结果 - 一个使用RDD转换并在行动 vs 之前将其转换为数据集只使用数据集及其转换 - 这两种情况都经历了相同的优化吗?
答案 0 :(得分:1)
不,他们没有。
当您对它们进行RDD和RDD转换时,不会进行任何优化。当你最终将它转换为数据集时,然后才会执行转换为基于钨的表示(它占用更少的内存而不需要经过垃圾收集)。
当您从头开始使用数据集时,它将从头开始使用基于钨的内存表示。这意味着它将占用更少的内存,随机播放将更小更快,并且不会发生GC开销(尽管在任何时候使用类型化操作时都会发生从内部表示到案例类和返回的转换)。如果您对数据集使用数据框操作,那么它也可以利用代码生成和催化剂优化。
另请参阅我的答案:Do I have to explicitly use Dataframe's methods to take advantage of Dataset's optimization?