赞
踩
Spark SQL属于Spark计算框架的一部分,是专门负责结构化数据的处理计算框架,Spark SQL提供了两种数据抽象:DataFrame、Dataset,都是基于RDD之上的一种高级数据抽象,在RDD基础之上增加了一个schema表结构。
spark_core_2.12
hadoop_hdfs
spark_sql_2.12
hadoop的有一个依赖jackson版本和scala2.12版本冲突了,Spark依赖中也有这个依赖,但是默认使用的是pom.xml先引入的那个依赖,把hadoop中jackson依赖排除了即可。
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>3.1.4</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
SQLContext
:只能做SQL编程,无法操作Hive以及使用HQL操作
HiveContext
:专门提供用来操作和Hive相关的编程
SparkSession
:全新的Spark SQL程序执行入口,把SQLContext和HiveContext功能全部整合了,SparkSession底层封装了一个SparkContext,而且SparkSession可以开启Hive的支持
DataFrame是以前旧版本的数据抽象(untyped类型的数据抽象),Dataset是新版本的数据抽象(typed有类型的数据抽象),新版本当中DataFrame底层就是Dataset[Row]
使用隐式转换函数从RDD、Scala集合创建DataFrame toDF() toDF(columnName*)
机制
如果集合或者RDD的类型不是Bean,而且再toDF没有传入任何的列名,那么Spark会默认按照列的个数给生成随机的列名,但是如果类型是一个Bean类型,那么toDF产生的随机列名就是bean的属性名
通过SparkSession
自带的createDataFrame
函数从集合或者RDD中创建DataFrame
从Spark SQL
支持的数据源创建DataFrame(HDFS、Hive、JSON文件、CSV文件等等)
ss.read.option(xxx,xxx).csv/json/text/orc/parquet(path)
ss.read.jdbc(url,table,properties)
使用Hive做数据存储,使用Spark SQL读取Hive的数据进行处理
有个提前的准备
ss.sql(“HQL语句”)
ss.read.format("jsonxx").load("path") 不太好用
ss.read.option(key,value).option(....).csv/json(path)
ss.read.jdbc(url,table,properties)
SparkSession
开启Hive的支持spark-hive
的编程依赖ss.sql()
通过代码来操作计算DataFrame中数据
Dataset提供的一系列转换算子来进行操作
DataFrame和Dataset提供了一系列的API操作,API说白了就是Spark SQL中算子操作,可以通过算子操作来获取DataFrame或者Dataset中的数据
RDD具备的算子DataFrame基本上都可以使用
DataFrame还增加了一些和SQL操作有关的算子: selectExpr、where/filter、groupBy、orderBy/sort、limit、join
RDD具备的行动算子DataFrame和Dataset也都具备一些
函数名 | 说明 |
---|---|
collect/collectAsList | 不建议使用,尤其是数据量特别庞大的情况下 |
foreach/foreachPartition | 获取结果集的一部分数据 |
first/take(n)/head(n)/takeAsList(n)/tail(n) | 获取的返回值类型就是Dataset存储的数据类型 |
printSchema | 获取DataFrame或者Dataset的表结构的 |
show() | |
show(num,truncate:boolean) | |
show(num,truncate:Int) | |
show(num,truncate:Int,ver:boolean) |
保存输出的算子
文件系统
df/ds.write.mode(SaveMode).csv/json/parquet/orc/text(path--目录)
JDBC支持的数据库
Hive
Dataset有类型,DataFrame无类型的。
Spark SQL基本上常见的MySQL、Hive中函数都是支持的
ss.udf.register(name,函数)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。