使用Spark将DataFrame数据写入MySQL表的完整指南(含MySQL5.7强制安装记录)
使用 Spark 将 DataFrame 数据写入 MySQL 表的完整指南(含 MySQL 5.7 强制安装记录)
在大数据处理中,经常需要将数据从一个数据源转移到另一个数据源。本文将详细介绍如何使用 Spark 将 DataFrame 数据写入 MySQL 表,并记录 MySQL 5.7 强制安装过程及常见问题解决方法。
一、MySQL 5.7 强制安装记录
1. 问题背景
在 CentOS 系统中安装 MySQL 5.7 时,可能因 GPG 密钥验证失败或依赖冲突导致常规安装失败。此时需通过强制安装跳过验证,适用于测试环境或无法联网更新密钥的场景。
2. 强制安装命令
1 | |
3. 安全风险提示
--nogpgcheck:跳过 GPG 签名验证,可能安装未经安全校验的包。--force --nodeps:强制覆盖文件并忽略依赖,可能导致服务不稳定。- 仅建议测试环境使用,生产环境需通过官方渠道修复密钥或依赖问题。
二、环境准备
- 操作系统:CentOS
- 数据库:MySQL 5.7(强制安装)
- 编程语言:Scala
- 数据处理框架:Spark
三、创建 MySQL 表
在 MySQL
中创建school数据库及students表:
1 | |
四、使用 Spark 写入数据到 MySQL
1. Spark Shell 启动命令(指定 MySQL 驱动)
1 | |
2. Scala
代码实现(含:paste用法)
1 | |
3. :paste用法说明
功能:在 Spark Shell 中启用多行粘贴模式,避免单行输入导致的语法错误。
操作步骤
:
- 输入
:paste并按回车; - 粘贴完整代码块;
- 按
Ctrl+D(Linux/Mac)或Ctrl+Z(Windows)执行。
- 输入
五、常见问题及解决方案(含强制安装相关)
1. 中文乱码问题
原因:字符集不统一
- MySQL 强制安装后默认字符集可能为 latin1,需手动修改。
解决步骤:
修改 MySQL 表字符集(5.1.x 驱动适用):
1
2ALTER DATABASE school CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE students CONVERT TO CHARACTER SET utf8;更新 MySQL 配置文件:
1
sudo vi /etc/my.cnf在
[mysqld]部分添加:1
2character-set-server = utf8
collation-server = utf8_general_ci重启服务:
sudo systemctl restart mysqldJDBC URL 添加字符集参数:
1
val jdbcUrl = "jdbc:mysql://localhost:3306/school?useSSL=false&characterEncoding=utf8"
升级驱动方案(推荐):
若需支持 Emoji / 生僻字,升级驱动至 8.0 +
并使用utf8mb4:
1 | |
2.
主键冲突(Duplicate entry)
原因:强制安装后可能残留测试数据或重复写入
- 场景:多次执行写入操作,
id重复触发主键约束。
解决方法:
覆盖模式(清空表后写入):
1
df.write.mode("overwrite").jdbc(jdbcUrl, tableName, connectionProps)过滤重复 ID:
1
2
3val existingIds = spark.read.jdbc(jdbcUrl, tableName, connectionProps).select("id").as[Int].collect().toSet
val filteredDF = df.filter(!df("id").isin(existingIds: _*))
filteredDF.write.mode("append").jdbc(jdbcUrl, tableName, connectionProps)
3.
驱动不支持utf8mb4错误
现象:
java.sql.SQLException: Unsupported character encoding 'utf8mb4'
原因:MySQL Connector/J 5.1.x
驱动不支持utf8mb4,仅支持utf8。
解决方案:
- 方案 1:使用
utf8编码(5.1.x 驱动): 见上文中文乱码问题解决方案。 - 方案 2:升级驱动至 8.0+: 见中文乱码问题 - 升级驱动方案。
4. MySQL 服务启动失败(强制安装后)
原因:依赖缺失或文件损坏
- 强制安装可能未正确初始化系统服务文件。
解决步骤:
1 | |
六、总结
1. 强制安装适用场景
- 测试环境快速部署;
- 离线环境无法获取官方 GPG 密钥;
- 临时绕过依赖问题(需承担稳定性风险)。
2. 最佳实践建议
- 生产环境优先使用官方源正常安装,确保密钥验证和依赖完整性;
- 处理中文时,5.1.x 驱动使用
utf8,8.0 + 驱动使用utf8mb4; - 写入数据前通过
.mode("overwrite")或 ID 过滤避免主键冲突。
通过以上步骤,可在强制安装 MySQL 5.7 的环境下,成功使用 Spark 完成数据写入及验证。
使用Spark将DataFrame数据写入MySQL表的完整指南(含MySQL5.7强制安装记录)
http://example.com/2025/05/20/使用Spark将DataFrame数据写入MySQL表的完整指南(含MySQL5-7强制安装记录/