Spark RDD 的 API 想对于 MR 的API在易用性上有了巨大的提升,但是对于函数式编程的新手,RDD API 还是存在一定的门槛。

    所以,DataFrame 应运而生,它是一种以 RDD 为基础的分布式数据集,类似于传统数据库中的二维表格。

    下图只管的展示了 RDD 和 DataFrame 的区别:

    Person
    Person
    Person
    Person

    RDD[Person]
    **

    Name Age Height
    String Int Double
    String Int Double
    String Int Double

    DataFrame

    RDD[Person] 虽然以 Person 作为类型,但是 Spark 框架本身不了解 Person 类的内部结构,而 DataFrame 提供了详细的结构信息,使得 Spark SQL 可以清楚的知道该数据集包含哪些列,每个列的类型和名称是什么,有了这些元数据,Spark SQL 的查询优化器可以进行针对性的优化。

    所以,使用 DataFrame 有如下这几点好处:

    1,精简代码,Spark SQL 1.3 起,提供了 Python,Scala,Java 3 中语言的 DataFrame API
    2,提升执行效率,逻辑优化
    3、减少数据读取,列式存储优化

    Spark SQL 外部源API的优势在于,可以将查询的各种信息下推至数据源处,从而利用数据源自身的优化能力完成列剪枝、过滤条件下推等优化,实现减少 IO,提高执行效率的目标。