开发者学堂课程【大数据 Spark2020版(知识精讲与实战演练)第三阶段:SparkSQL 是什么_适用场景】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12035
SparkSQL 是什么_适用场景
在说 spark SQL 应用场景之前,有必要先去补充一下关于数据集的分类,然后,再去说使用场景。这是我们整个小节的作用,通过对于 spark 应用场景的理解,大家会更容易去理解 spark SQL 是干什么。
Sparks SQL 的应用场景
1、数据集的分类
数据集主要分为三类,一类叫做结构化数据,一类叫做半结构化数据,一类叫做非结构化数据。
(1)结构化数据
一般指数据有固定的 Schema,例如在用户表中, name 字段是 String 型,每一条数据的 name 字段值都可以当作 String 来使用。
首先对于结构化数据集,对于 Michael 的一张表,他就是一个结构化的数据,就是有非常明确的约束,比如说,一个表里面有三列,第一列叫做 name,第二列叫做 age,第三列叫做 score,你在使用这个 insert 来去插入数据的时候,只能按照这个模式来进行插入,这是第一方面,这是我们说的这个结构化第一方面,就是这个字段要约束。
第二点,你如果往这个 name 列里面插数据,假设说这个 name 列,一开始规定好了是 string,是一个误差,不能往里面插一个 ins,对于字段类型也有约束,我们称之为结构化数据。
他有非常严格的约束,不符合这个约束插不进去,比如说 Michael 的表,不符合插不进去,所以这张表,我们就称之为叫做结构化数据,一般情况下,结构化数据也特指的就是各种关系型数据库当中的表。
(2)半结构化数据
一般指的是数据没有固定的 Schema,但是数据本身是有结构的。
有一些数据集,其中也是有一些约束,并且它也有字段的这个概念,你看字段这个概念,并且这个字段概念当中,他也有这个类型的概念。比如说,在 Jason 当中,他如果加上这样的一个引号,它就是一个字符串,没有加这个引号,直接来一个 int,我们就称之为叫做 membership。
他有这个字段的一些约束,有这个字段的这个列,第二点,每一列有数据类型,每一列也有类型,他和结构化数据有什么区别?
区别就在于,虽然你这个地方指定了,这叫 first last name age,如果想再去增加一列也可以,就是说它没有一个严格的约束,这个数据集必须长成什么样子,不符合会怎么样,这种就称之为叫做半结构化数据,不是说半结构化数据它没有结构,只是说他没有约束,可以随意的去修改,它也有结构,但你可以去修改。
(3)非结构化数据
没有固定 Schema。
指的是半结构化数据是没有固定的 Schema 的,可以理解为没有显式指定 Schema。
比如说一个用户信息的 JSON 文件,第一条数据的 phone_num 有可能是 String,第二条数据虽说应该也是 String,但是如果硬要指定为 BigInt,也是有可能的。
因为没有指定 schema,没有显式的强制的约束。
有结构
虽说半结构化数据是没有显式指定 Schema 的,也没有约束,但是半结构化数据本身是有有隐式的结构的,也就是数据自身可以描述自身。例如 JSON 文件,其中的某一条数据是有字段这个概念的,每个字段也有类型的概念,JSON 是可以描述自身的,也就是数据本身携带有元信息。
2、适用场景
了解了三种数据的形态,sparks SQL 更适合用哪种数据来进行操作的呢?它更适合做什么样的这个数据集的操作呢?
l Spark 的 RDD 主要用于处理非结构化数据和半结构化数据
l SparksQL 主要用于处理结构化数据
注意:
虽然 SparkSQL 是基于 RDD 的,但是 SparkSQL 的速度比 RDD 要快很多。
SparkSQL 在编写的时候可以通过更方便针对于结构化数据的 API 来进行更好的操作。
SparkSQL 相较于 RDD 的优势在哪?
l SparksQL 提供了更好的外部数据源读写支持
因为大部分外部数据源是有结构化的,需要在 RDD 之外有一个新的解决方案,来整合这些结构化数据源
l SparksQL 提供了直接访问列的能力
因为 SparkSQL 主要用做于处理结构化数据,所以其提供的 API 具有一些普通数据库的能力。