美文网首页
Spark-SparkSQL介绍

Spark-SparkSQL介绍

作者: 布莱安托 | 来源:发表于2020-07-06 20:01 被阅读0次

    SparkSQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrameDataSet,并且作为分布式SQL查询引擎使用。

    不同于Hive将HiveQL转换成MapReduce然后提交执行,SparkSQL是将SQL语句转换成RDD然后提交集群执行,执行效率大大提升。

    SQL的特点

    1. 易整合
    2. 统一的数据访问方式
    3. 兼容Hive
    4. 标准的数据连接

    DataFrame

    与RDD类似,DataFrame也是一个分布式数据容器。但是DataFrame更像传统数据库的二维表格,除了数据之外还记录数据的结构信息,即schema。

    同时,与Hive类似,DataFrame也支持嵌套数据类型(struct,array和map)。

    从API易用性的角度看DataFrame API提供的是一套高层的关系操作,比RDD API要更加友好。

    对于RDD来说,它只关心是什么类型的数据:

    Person
    Person
    Person
    Person

    而对于DataFrame,它呈现了数据的每一列的名字以及数据类型:

    Name Age
    String Int
    String Int

    DataFrame为数据提供了Schema的视图,可以把它当做是数据库中的一张表,DataFrame也是懒执行的,但是性能要比RDD要高,主要原因是:

    • 优化的执行计划:查询计划通过Spark Catalyst Optimiser进行优化
    image.png

    例如:

    users.join(events, users("id") === events("user_id")).filter(events("date") > "2019-12-01")
    

    执行计划为:

    • logical plan
    image.png
    • optimized plan
    image.png
    • optimized plan with intelligent data sources
    image.png

    例子中展示了一个对用户事件分析的操作。两个DataFrame进行join后进行filter过滤,如果按照逻辑计划的话会先进行join,再进行filter,而join涉及到了executor间的网络传输,是一个开销比较大的操作。

    而SparkSQL优化器则将filter操作下推,先对DataFrame进行过滤,在进行join,这样就避免了不必要的数据的传输,提高了性能。

    DataSet

    1. 是DataFrame API的一个扩展。
    2. 用户友好的API风格,既具有类型安全检查也具有DataFrame的查询优化特性。
    3. DataSet支持编解码器,当需要访问非堆上数据是可以避免反序列化整个对象,提高了效率。
    4. case class可以用来在DataSet中定义数据的结构信息,类中的每个属性名称直接映射到DataSet中的字段名称。
    5. DataFrame是DataSet的特例,DataFrame=DataSet[Row],所以通过as方法可以将DataFrame转换为DataSet。而Row是一个类型,用来定义结构化的一行数据。
    6. DataSet是强类型的。

    相关文章

      网友评论

          本文标题:Spark-SparkSQL介绍

          本文链接:https://www.haomeiwen.com/subject/qzbgqktx.html