小谈今天又是新的一天,又是喜欢你的一天
好久没有写过文章了,虽然过去了四五天,今天写文章很简单,手痒痒了是在想写文章了。今天的文章是关于Spark SQL系列的文章,关于上一个追妻系列的RDD编程,并没有放弃,还是会写的。基本的行动算子和转换算子都写完了。之后就是累加器分区器还有其它的数据类型了。
今天更新的是Spark SQL,为什么不写RDD呢,很简单,SQL写得好,工作随便找
Spark SQL是什么如果不出意外的话,Spark SQL将会很长一段时间出现在博客里面。
先来介绍一下什么是Spark SQL吧
Spark SQl的前身是Shark,当时Hadoop 上有Hive,可以用Hsql来替代mr程序去完成数据分析,非常的方便,使得开发的困难大大减少,当时的Spark生态系统没有,因此创建了前身Shark,后来Shark不维护了,全面在Spark上面来实现Shark。也就是现在的Spark SQL。
虽然说Spark有自己的生态系统,但是Spark大部分都是在Hdfs上面的。前面说过,MR过时了,但是hdfs这个存储系统并不过时,Spark就在hdfs上面进行的。
Spark SQL能干什么毕竟是SQL Boy,那么就从ETL方面来讲解Spark SQL可以干什么吧
- 抽取(Extract):Spark SQL可以从文件系统(HDFS,本地系统),关系型数据库或者非关系型数据中获取数据。Spark SQL支持的文件类型有csv,json,xml,Parquet,ORC,Avro等。转换(transform):就是所谓的数据清理加载(load):可以将处理完的数据存储在不同的数据源中。
Spark主要用来处理结构化的数据,什么是结构化数据呢?
结构化数据是指记录内容具有明确的结构信息且数据集内的每一条记录都符合结构规范的数据集合,由二维表结构来逻辑表达和实现的数据集合。举个例子,就是关系型数据库的各个字段以及属性和类型等信息。
Spark SQL的重点Data frame。可以通过Data frame的API来对数据进行分析,称之为DSL。
同时,也可以先将Data frame注册成表,然后使用SQL或者Hive SQL来进行数据分析。对于熟练使用SQL的我们可以更加的迅速上手
既然说到了Data frame,那么来介绍一下
之前学习RDD的时候,RDD是一条条数据的集合,但是并不了解每一条数据的内容是什么,Data frame就不一样了,Data frame明确规定了每一条数据有几个命名字段组成。为了形象的对比一下,来看图片
RDD只能知道存储的是Person类型的对象,Data frame存储的是每个Person对象的信息。Data frame就是裸泳,RDD就好比穿了衣服。一个一览无余,一个啥都看不出来
Spark SessionSpark SQL编程的起点就是Spark Session,刚开始学习Spark Core的时候,编程的入口就是spark conf。现在Spark SQL的入口变了。
Spark Session可以创建Data frame对象,可以读取外部文件并且通过SQL进行查询分析。
spark conf:创建上下文环境对象
spark Session:创建Spark Session对象
创建Data frame通过读取json文件来创建df对象。先看一下json文件
开始进行表演
读取people.json文件来创建Data frame对象
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Spark_Sql")
val sparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
import sparkSession.implicits._
//读取json文件
val frame = sparkSession.read.json("date/people.json")
如何展示这个文件的数据?
frame.show()
可以看到,结果出来了,就跟表查询的结果一样
总结明天就会更新Spark SQL的DSL和Sql语句了。
今天就更新到这里
希望我的科目四可以预约成功



