数据的加载与保存
加载数据的方法
选项参数:可以通过选项参数传入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语句)。
保存数据:选择保存模式并保存数据。
IDEA通过JDBC对MySQL进行操作:
- 导入依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
</dependency>
MySQL8 <version>8.0.11</version>
2.读取数据
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SQL")
val spark:SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
import spark.implicits._
//通用的load方式读取
spark.read.format("jdbc")
.option("url","jdbc:mysql://localhost:3306/system")
.option("driver","com.mysql.jdbc.Driver")//com.mysql.cj.jdbc.Driver
.option("user","root")
.option("password","123456")
.option("dbtable","user")
.load().show()
spark.stop()
//通用的load方法的另一种形式
spark.read.format("jdbc")
.options(
Map("url"->"jdbc:mysql://localhost:3306/system?user=root&password=123456","dbtable"->"user","driver"->"com.mysql.jdbc.Driver"))
.load().show()
//通过JDBC
val pros :Properties = new Properties()
pros.setProperty("user","root")
pros.setProperty("password","123456")
val df :DataFrame = spark.read.jdbc("jdbc:mysql://localhost:3306/system","user",pros)
df.show()
3) 写入数据
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SQL")
val spark:SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
import spark.implicits._
val rdd: RDD[Stu] = spark.sparkContext.makeRDD(List(Stu("lisi", 20),
Stu("zs", 30)))
val ds:Dataset[Stu] = rdd.toDS()
ds.write.format("jdbc")
.option("url","jdbc:mysql://localhost:3306/system")
.option("driver","com.mysql.jdbc.Driver")
.option("user","root")
.option("password","123456")
.option("dbtable","user2")
.mode(SaveMode.Append)
.save()
spark.stop()
MySQL和Spark Circle的连接
版本兼容性:
MySQL的不同版本(如5.x和8.x)需要对应版本的驱动。
Spark Circle在编译时可以包含或不包含Hive支持。
连接方式:
内嵌Hive:无需额外配置,直接使用。
外部Hive:需要下载配置文件(PSML、CORE-SML、HDFS),并将这些文件放在Spark目录下。
修改配置文件:将hive-site.xml中的本地文件路径改为虚拟机中的Hive路径(如note01)。
复制MySQL驱动:将MySQL驱动复制到Spark目录下。
启动Spark Shell:
可以通过CMD或双击B目录下的CMD文件启动。
在Spark Shell中输入SQL语句可以查看数据库和数据表。
Spark Circle CLI:
运行spark-shell命令启动。
直接输入MySQL语句,无需加SQL括号和双引号。
IDEA与Hive的连接
导入依赖:
需要导入与Spark版本一致的依赖包(如3.0.0版本)。
确保Hive版本与Spark版本一致。
环境配置:
虚拟机必须运行,因为使用的是虚拟机中的Hive。
将配置文件和驱动放在指定目录下。
代码实现:
导入必要的包。
创建配置对象和Hive对象。
输入Hive语句,如展示所有数据表和数据库。
常见错误:
确保所有配置文件和驱动正确放置。
检查版本兼容性。