一、数据加载与保存通用方式
1. 加载数据
通用方法: spark.read.load ,支持通过 format 指定数据格式, option 设置参数, load 指定路径
简化查询:可直接对文件执行SQL查询,如 spark.sql("select * from json.'文件路径'") 。
2. 保存数据
通用方法: df.write.save ,通过 format 指定格式, option 设置参数(如JDBC连接信息), save 指定路径。
保存模式(SaveMode):
模式说明
ErrorIfExists 存在则报错(默认)
Append 存在则追加
Overwrite 存在则覆盖
Ignore 存在则忽略
二、特定格式数据处理
1. Parquet
默认格式:Spark SQL默认数据源,无需显式指定 format 。
加载: spark.read.load("parquet文件路径") 。
保存: df.write.mode("append").save("保存路径") (自动以Parquet格式保存)。
2. JSON
加载: spark.read.json("json文件路径") ,要求每行是独立JSON串,自动推断Schema生成 Dataset[Row] 。
scala
val peopleDF = spark.read.json("people.json")
peopleDF.createOrReplaceTempView("people")
spark.sql("SELECT name FROM people WHERE age BETWEEN 13 AND 19").show()
3. CSV
配置参数:支持设置分隔符( sep )、推断Schema( inferSchema=true )、表头( header=true )等。
4. MySQL(JDBC)
依赖:需导入MySQL驱动(如 mysql-connector-java ,5.x或8.x版本)。
写入数据:通过 mode(SaveMode) 指定保存策略,如追加模式 mode(SaveMode.Append) 。
Spark-SQL连接Hive的方式
1. 内嵌Hive
特点:无需额外配置,直接使用,但生产环境不常用。
2. 外部Hive
配置步骤:
将 hive-site.xml (修改 ConnectionURL 为实际Hive元数据库地址)、 core-site.xml 、 hdfs-site.xml 拷贝到Spark的 conf/ 目录。
将MySQL驱动(如 mysql-connector-java.jar )放入Spark的 jars/ 目录。
重启 spark-shell ,通过 spark.sql("show tables") 验证。
3. Spark beeline
用途:通过Hive的beeline工具访问Spark Thrift Server(兼容HiveServer2协议)。
步骤:同外部Hive配置,启动Thrift Server后,使用 beeline -u jdbc:hive2://node01:10000 -n root 连接。
4. Spark-SQL CLI
操作:在Spark目录下运行 spark-sql 命令,直接执行HQL语句(需提前配置驱动和 hive-site.xml )。
5. 代码操作Hive
依赖:添加 spark-hive_2.12 和 hive-exec 依赖。
配置:将 hive-site.xml 放入项目 resources 目录,启用Hive支持
注意事项:
权限问题:通过 System.setProperty("HADOOP_USER_NAME", "用户名") 设置Hadoop用户。
仓库地址:通过 config("spark.sql.warehouse.dir", "HDFS路径") 指定Hive仓库位置。
核心总结
数据交互:Spark-SQL支持多种数据源(文件、数据库、Hive),通过统一的 read/write 接口和格式参数实现通用操作。
Hive集成:通过配置文件和依赖,Spark-SQL可无缝连接外部Hive,支持SQL查询、元数据管理等功能,满足复杂数据处理需求。