spark学习8:spark SQL

1.spark SQL是什么?

spark SQL类似 hive 的功能。

hive 是把SQL转译成 查询hadoop的语法,

而spark SQL是把 SQL转译成 查询spark的语法。

并且,spark SQL的前身 shark(也叫hive on spark) 就是借鉴的hive的  前几个步骤,即除了最后的转译成 查询spark的代码,之前都借鉴了。

2.为什么用spark SQL?

2.1关系型数据库在大数据时代的不足

根源还是因为关系型数据库不能满足目前数据存读需求,

大数据时代,90%的数据都是非结构化和半结构化的。

1.需要一个工具能够满足, 结构化和非结构化的数据处理需求。

2.关系型数据库,只能做一些简单的聚合操作(求和、平均值等),

  无法满足一些高级分析需求,比如 机器学习、图计算等。

spark SQL的优势:

1.有个数据抽象 叫dataframe,可以把结构化和 非结构化的数据融合起来。

2.可以应用于处理高级分析 机器算法、图形计算等。MLlib 的机器学习算法中,底层的数据结构就是是sparkSQL的 dataframe

2.2shark的缺陷

spark SQL的前身 shark(也叫hive on spark) 照搬hive的  前几个步骤,

存在2个致命问题,

1. 执行计划优化环节,无法添加新的优化策略

hive 是专门把SQL转为对hadoop的查询 ,即MapReduce程序,

对spark的程序的优化并不好。

2.spark是线程级的程序,而hadoop是进程级的程序。

导致shark 一开始就存在 线程安全问题。

所以,sparkSQL除了引用 hive 中第一个parase模块 (该模块是把SQL转为语法树)外,其他模块,查询计划、查询优化....完全面向spark应用自己研发。

3.spark SQL的使用

3.1 spark dataframe

sparkSQL新增了一个 数据抽象,dataframe

dataframe 相较RDD 多了一个结构化存储。

 3.2 RDD 和 sparkSQL 的dataframe 的区别

传统的RDD是将数据存储为一个个对象,然后数据的值相当于对象的一个属性。

eg:RDD 需要找到张三的刷牙杯,第一步,先找到张三 这个对象,然后再从张三对象中 取刷牙杯的属性。

dataframe 是相当于 把RDD做了结构化的存储。

3.3创建 dataframe 对象

3.3.1 就像创建RDD一样,需要先创建一个sparkSession 对象

ps:spark-shell 环境中会 自动生成两个对象, sparkContext对象 :sc 和 sparkSession对象:spark

但是如果在 自己的编程环境中,需要手动生成 sparkSession对象

 ps:在idea中 ,如果没有sparkSQL的依赖,需要现在pom.xml 中添加依赖,

 

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.12</artifactId>
    <version>3.0.3</version>
</dependency>

如果不确定下载哪个版本,Apache可以查看对应的 版本。

下载链接:     Downloads | Apache Spark

第一个框选对应的 spark版本,

第3个可以直接下载 全部依赖。

下载好后,可以解压看下 jars 文件夹内,对应的 各个组件版本。

 

 

3.3.2创建dataframe

1.

2.导入隐式转换包,

3.读取数据文件

读取json 数据:

读取parquet文件

 读取csv 文件:

eg1: 读取一个json文件

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>