我们可以使用RDD(低级API),Dataframe,SQL编写spark代码/转换。根据我的理解,Dataframe/SQL比低级API(RDD)性能更高(由于钨,催化剂优化器),因此建议使用Dataframe/SQL。spark在内部将所有代码转换为RDD。因此,即使我们编写Dataframe,它也会在内部转换为RDD。那么使用高级API有什么好处呢?
roejwanj1#
有一个Spark Optimizer -Catalyst-它将优化策略应用于DF或DS。而不是RDD。此外,您可以使用RDD处理整个行/元组,无论您想如何称呼它,而不是DF或DS,它们可以由Spark以列的方式使用。
Catalyst
o2gm4chl2#
Dataframe 并不比RDD快。正如你所说,一切都转换为RDD,所以使用RDD理论上可以实现更高的性能,但是使用Dataframes,你可以编写好的旧SQL,并允许Spark处理分区和其他优化。当你传递SQL时,Spark可能会看到你最后需要什么,并尝试优化它。此外,编写高性能的RDD代码在某种程度上需要Spark内部的知识。RDD中低级API的一个例子是,你可以为RDD指定一个分区函数,但是对于Dataframe API,你只能使用有限数量的分区策略,比如散列或范围分区。
2条答案
按热度按时间roejwanj1#
有一个Spark Optimizer -
Catalyst
-它将优化策略应用于DF或DS。而不是RDD。此外,您可以使用RDD处理整个行/元组,无论您想如何称呼它,而不是DF或DS,它们可以由Spark以列的方式使用。o2gm4chl2#
Dataframe 并不比RDD快。正如你所说,一切都转换为RDD,所以使用RDD理论上可以实现更高的性能,但是使用Dataframes,你可以编写好的旧SQL,并允许Spark处理分区和其他优化。当你传递SQL时,Spark可能会看到你最后需要什么,并尝试优化它。此外,编写高性能的RDD代码在某种程度上需要Spark内部的知识。RDD中低级API的一个例子是,你可以为RDD指定一个分区函数,但是对于Dataframe API,你只能使用有限数量的分区策略,比如散列或范围分区。