数据加载与保存:
加载数据的方法
选项参数:可以通过选项参数传入URL地址、用户名、密码和数据表名称等。
路径参数:可以传入加载数据的路径。MySQL语句:可以直接导入MySQL语句来加载数据。
保存数据的方法通用方法:使用df.write方法保存数据。
格式和选项:可以指定保存的数据格式和选项参数。
保存模式:可以选择不同的保存模式(如追加、覆盖、忽略、报错)。
数据源格式
默认数据源格式:Spark SQL默认使用一种能够存储嵌套数据的格式,不需要指定格式。具体数据加载和查询。
JSON数据
加载JSON文件:使用spark.read.json方法加载JSON文件。
val path = "/opt/module/spark-local/people.json" val peopleDF = spark.read.json(path)
查询数据:可以通过SQL语句查询JSON数据。
val resDF = spark.sql("SELECT name FROM people WHERE age BETWEEN 13 AND 19")
CSV数据
加载CSV文件:可以配置CSV文件的列表信息并读取CSV文件。
注意事项:CSV文件的第一行通常设置为数据列信息。
MySQL数据
连接MySQL:通过JDBC从关系型数据库中读取数据。
版本匹配:确保Spark和MySQL的驱动版本匹配。
加载数据:使用spark.read.format("jdbc")方法加载MySQL数据。
写入数据:使用df.write.format("jdbc")方法将数据写入MySQL。
具体操作步骤导入依赖:确保导入所需的依赖包。
例如:
配置对象:创建配置对象并设置相关参数。
例如:
加载数据:使用不同的方法加载数据(如选项参数、路径参数、MySQL语句)。
保存数据:选择保存模式并保存数据。
Spark-SQL连接Hive
使用方式分为内嵌Hive、外部Hive、Spark-SQL CLI、Spark beeline 以及代码操作。
1.内嵌的 HIVE
如果使用 Spark 内嵌的 Hive, 则什么都不用做, 直接使用即可。但是在实际生产活动当中,几乎没有人去使用内嵌Hive这一模式。
2.外部的 HIVE
在虚拟机中下载以下配置文件:
如果想在spark-shell中连接外部已经部署好的 Hive,需要通过以下几个步骤:
Spark 要接管 Hive 需要把 hive-site.xml 拷贝到 conf/目录下,并将url中的localhost改为node01
把 MySQL 的驱动 copy 到 jars/目录下
把 core-site.xml 和 hdfs-site.xml 拷贝到 conf/目录下
重启 spark-shell
3.运行 Spark beeline(了解)
如果想连接 Thrift Server,需要通过以下几个步骤:
Spark 要接管 Hive 需要把 hive-site.xml 拷贝到 conf/目录下
把 Mysql 的驱动 copy 到 jars/目录下
把 core-site.xml 和 hdfs-site.xml 拷贝到 conf/目录下
启动 Thrift Server
使用 beeline 连接 Thrift Server
4.运行Spark-SQL CLI
- 将mysql的驱动放入jars/当中;
- 将hive-site.xml文件放入conf/当中;
- 运行bin/目录下的spark-sql.cmd 或者打开cmd,在D:\spark\spark-3.0.0-bin-hadoop3.2\bin当中直接运行spark-s
5.代码操作Hive
1. 导入依赖。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.12</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.3.3</version>
</dependency>
可能出现下载jar包的问题:
D:\maven\repository\org\pentaho\pentaho-aggdesigner-algorithm\5.1.5-jhyde
2. 将hive-site.xml 文件拷贝到项目的 resources 目录中。
3. 代码实现。
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("hive")
val spark:SparkSession = SparkSession.builder()
.enableHiveSupport()
.config(sparkConf)
.getOrCreate()
spark.sql("show databases").show()
spark.sql("create database spark_sql")
spark.sql("show databases").show()
注意:
1.如果在执行操作时,出现如下错误:
可以在代码最前面增加如下代码解决:
System.setProperty("HADOOP_USER_NAME", "node01")
此处的 node01 改为自己的 hadoop 用户名称
2.在开发工具中创建数据库默认是在本地仓库,通过参数修改数据库仓库的地址: config("spark.sql.warehouse.dir", "hdfs://node01:9000/user/hive/warehouse")