DataFrame与RDD的区别
看上图,左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构,而右侧的DataFrame就不一样了,它更像是一个二维表格,在这个二维表格里面,有行有列。使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。DataFrame多了数据的结构信息,即不仅可以知道里面的数据,而且它还可以知道里面的schema信息。相当于结构化的了,而平常我们所说的优化,如果想要优化的更好,所要暴露的信息更多就越好,这样系统才能更好大的进行优化 。以上是从存储的角度分析两者的区别。
现在再结合上图进行理解:
Java 、Scala操作RDD的底层是跑在JVM上的,而Python是跑在python execution,由于环境不一样,从而他们执行时的效率不一样的。但是有DF就不一样的,经过DF后,再经过一层逻辑执行计划,等于将Java ,Scala,Python 等全部都转换成逻辑执行计划Logicplan,完了后才到物理执行计划Physical Execution。所以不管是什么语言,执行的效率几乎是一样的。这个就是从计算(执行)的角度去分析两者的区别。