美文网首页
1 Spark SQL 简介

1 Spark SQL 简介

作者: GongMeng | 来源:发表于2020-03-10 16:01 被阅读0次

    1.概述

    Spark SQL 是一层依赖Spark Core也就是基础操作的API封装出的一层组件. 和GraphX类似, 它的核心思想是解决两个问题:

    1. 如何把底层数据结构化. 在Spark SQL这里是结构化成表.值得一提的是,当前有Delta Lake来提供众多底层文件的接入. 这个项目的存在非常接近左耳朵耗子设想的OLAP分析工具, 上层分析不依赖底层存储. 数据的备份, 平衡, 增量更新, 优化等都应该在存储层自动完成.
    2. 如何对结构化数据进行计算. 在Spark SQL里, 是对SQL, 具体来说是Hive SQL标准的语句进行翻译, 解释为一系列底层的Map Reduce操作然后进行执行.

    Spark SQL 暴露出多种接口

    • 基于DataSet的方法调用接口
    • 直接执行类HIVE的SQL语句
    • 在流上的Structure Streaming API
    • Thrift Client直接连进来跑SQL也没有问题. HIVE on Spark是很多公司的部署方式

    Spark SQL 支持多种函数

    • 大部分HIVE有的标准函数, 当然也支持UDF等等
    • 聚合函数, 当然也就支持对应的UDAF
    • 窗口函数

    2.1 编程接口DataSet

    DataSet是一个新的抽象接口, 非常类似RDD, 它暴露出各种类SQL的actiontransform语句.

    DataSet 执行流程概览

    下面是一个具体的例子

    // 定义一个对象
    case class Person(name: String, age: Int)
    
    // 新建一个RDD
    import org.apache.spark.rdd.RDD
    val peopleRDD: RDD[Person] = sc.parallelize(Seq(Person("Jacek", 10)))
    
    // 自动RDD转DataSet
    scala> val people = peopleRDD.toDS
    people: org.apache.spark.sql.Dataset[Person] = [name: string, age: int]
    
    // 可以跑各种接口了
    scala> val teenagers = people.where('age >= 10).where('age <= 19).select('name).as[Str
    ing]
    teenagers: org.apache.spark.sql.Dataset[String] = [name: string]
    scala> teenagers.show
    +-----+
    | name|
    +-----+
    |Jacek|
    +-----+
    
    // 把它注册成一个临时表
    people.createOrReplaceTempView("people")
    
    // 传统SQL一样可以工作
    val teenagers = sql("SELECT * FROM people WHERE age >= 10 AND age <= 19")
    scala> teenagers.show
    +-----+---+
    | name|age|
    +-----+---+
    |Jacek| 10|
    +-----+---+
    

    2.2 DataSet vs DataFrame
    两者在新的版本中进行了合并, DataSet在读写底层文件, 动态绑定元数据和列的关系上进行了改进. 而且在DataBricks的文档中提到, 它对Python用户更加友好, 更加适合传统的数据分析师们使用.

    区别

    相关文章

      网友评论

          本文标题:1 Spark SQL 简介

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