SparkSQL三种数据源的load与save——本地&HDFS、JDBC、Hive数据库

SparkSQL,通俗来讲就是将DataFrame构建一张临时表,然后去用sql语言查询这张临时表

DF.createOrReplaceTempView("XX表名")
spark.sql("select * from XX表名").show

与Hive将HQL转化成MapReduce然后提交到集群中执行类似,SparkSQL是转化成了RDD,提交到集群中用Spark来执行。Spark的运算效率比MR要快很多。

并且SparkSQL兼容Hive与JDBC;SparkSQL提供的两个抽象编程模块:DataFrame和DataSet。

SparkSQL的DataFrame接口支持多种数据源的操作,下面整理一下SparkSQL常用三种数据源的load加载与save保存语法。

目录

一、本地 & HDFS

1. 加载DataFrame语法

2. 创建完DataFrame后,使用SparkSQL执行sql查询语句,两种方式

3. 数据保存

二、JDBC数据源

1. 从mysql中加载数据

2. 将数据写入mysql

三、Hive数据库

1. 启动Spark-shell使用hive

2. 直接启动Spark-sql使用hive

3. 代码中使用hive


一、本地 & HDFS

SparkSQL中默认数据源是parquet格式,两种数据来源

file:/path
hdfs://hadoop100:9000:/path

1. 加载DataFrame语法

(1)加载默认格式parquet
spark.read.load("file:/opt/module/data.parquet")

(2)加载json格式
方法一:
spark.read.json("hdfs://hadoop100:9000/data/1.json")

方法二:
spark.read.format("json").load("hdfs://hadoop100:9000/data/1.json")

2. 创建完DataFrame后,使用SparkSQL执行sql查询语句,两种方式

(1)基础查询方式
DF.createOrReplaceTempView("XX表名")
spark.sql("select * from XX表名").show

(2)优化查询方式
spark.sql("select * from json.`file:/opt/module/2.json`").show
spark.sql("select * from parquet.`hdfs://hadoop102:9000/2.parquet`").show

3. 数据保存

完整语法:DF.write.format("~").mode("overwrite / append / ignore / errorifexists").save("~")

(1)输出文件夹output若存在,会报错
1. 默认保存格式parquet,压缩方式snappy
DF.write.save("file:/output")

2. 指定保存为.json格式文件
DF.write.format("json").save("file:/output")

(2)覆盖output文件夹的文件
DF.write.format("json").mode("overwrite").save("file:/output")

(3)追加到output文件夹的文件
DF.write.format("json").mode("append").save("file:/output")

 

二、JDBC数据源

SparkSQL可以通过JDBC从关系型数据库中读取数据的方式创建DataFrame,也可以将DataFrame通过一系列计算后,将数据写回关系型数据库中。

但是首先要将相关的数据库驱动放到spark安装目录下的/jars目录中。

mysql-connector-java-5.1.27-bin.jar.zip

1. 从mysql中加载数据

val prop = new java.util.Properties()
prop.put("user","root")
prop.put("password","000000")

eg:获取mysql中company库,stuff表的数据,将表中数据变成DataFrame

scala> val jdbcDF = spark.read.jdbc("jdbc:mysql://hadoop100:3306/company","staff",prop)
jdbcDF: org.apache.spark.sql.DataFrame = [id: int, name: string ... 1 more field]

scala> jdbcDF.show
+---+-----+----+
| id| name| sex|
+---+-----+----+
|  1|Kevin|Male|
|  2| John|Male|
+---+-----+----+

2. 将数据写入mysql

这里savemode用追加append

scala> jdbcDF.write.mode("append").jdbc("jdbc:mysql://hadoop100:3306/company","staff",prop)

 

三、Hive数据库

Spark本身拥有自带的内嵌Hive功能模块,使用外部Hive功能时,需要进行以下操作把内嵌的Hive删掉;这样就可以直接直接操作hive表,与hive将HQL转化为MapReduce不同,Spark中支持hive在Spark引擎中计算,速度更快。

[kevin@hadoop100 spark]$ rm -rf derby.log 
[kevin@hadoop100 spark]$ rm -rf metastore_db/
[kevin@hadoop100 spark]$ rm -rf spark-warehouse/
[kevin@hadoop100 spark]$ cp /opt/module/hive/conf/hive-site.xml ./conf/

1. 启动Spark-shell使用hive

spark/bin/spark-shell启动

spark.sql("HQL语句").show

2. 直接启动Spark-sql使用hive

spark/bin/spark-sql启动

spark-sql (default)> 
剩余操作与hive一致

3. 代码中使用hive

添加依赖

<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-hive -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.11</artifactId>
    <version>2.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-exec</artifactId>
    <version>1.2.1</version>
</dependency>

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值