1 Spark SQL 简介

2020-03-10  本文已影响0人  GongMeng

1.概述

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

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

Spark SQL 暴露出多种接口

Spark SQL 支持多种函数

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用户更加友好, 更加适合传统的数据分析师们使用.

区别
上一篇 下一篇

猜你喜欢

热点阅读