Spark,连接MySQL数据库,添加数据,读取数据

以下是使用Spark连接MySQL数据库、添加数据和读取数据的步骤(基于Scala API):

  1. 准备工作
  • 添加MySQL驱动依赖

在Spark项目中引入MySQL Connector JAR包(如 mysql-connector-java-8.0.33.jar ),或通过Spark提交命令指定:

bash

spark-submit --jars mysql-connector-java-8.0.33.jar your_app.jar

  • 确保MySQL服务运行

确认数据库、表存在,且Spark所在节点可访问MySQL端口(默认3306)。

  1. 读取MySQL数据

scala

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder()

.appName("Spark MySQL Example")

.master("local[*]") // 或集群地址

.getOrCreate()

// 读取参数配置

val jdbcUrl = "jdbc:mysql://localhost:3306/test_db?useSSL=false&useUnicode=true&characterEncoding=utf8"

val table = "users" // 表名

val user = "root"

val password = "your_password"

// 读取数据为DataFrame

val df = spark.read.format("jdbc")

.option("url", jdbcUrl)

.option("dbtable", table)

.option("user", user)

.option("password", password)

.load()

// 显示数据

df.show()

  1. 写入数据到MySQL

scala

// 假设已有待写入的DataFrame(如dfToSave)

val writeMode = "append" // 写入模式:append(追加)、overwrite(覆盖)、ignore(忽略重复)、errorIfExists(冲突报错)

dfToSave.write.format("jdbc")

.option("url", jdbcUrl)

.option("dbtable", "new_users") // 目标表名

.option("user", user)

.option("password", password)

.option("driver", "com.mysql.cj.jdbc.Driver") // 驱动类(可选,Spark会自动推断)

.mode(writeMode)

.save()

关键参数说明

  • jdbcUrl :MySQL连接URL,需指定数据库名和字符编码(避免中文乱码)。

  • dbtable :支持直接写表名,或子查询(如 "(SELECT * FROM users WHERE age > 18) AS subquery" )。

  • writeMode :控制写入行为,根据需求选择模式。

注意事项

  1. 驱动版本匹配:确保MySQL驱动版本与数据库版本兼容(如MySQL 8.0+对应 mysql-connector-java 8.0+ )。

  2. 分区并行读取:若数据量大,可添加 partitionColumn 、 lowerBound 、 upperBound 参数并行读取:

scala

.option("partitionColumn", "id") // 分区字段(需为数字类型)

.option("lowerBound", "1") // 分区最小值

.option("upperBound", "1000") // 分区最大值

.option("numPartitions", "4") // 分区数(并行度)

  1. 事务支持:MySQL JDBC写入不保证事务原子性,大规模写入建议使用批量操作或外部工具(如Sqoop)。

通过以上代码,可实现Spark与MySQL的数据交互。

相关推荐
.Eyes1 小时前
OceanBase 分区裁剪(Partition Pruning)原理解读
数据库·oceanbase
NPE~2 小时前
[docker/大数据]Spark快速入门
大数据·分布式·docker·spark·教程
MrZhangBaby2 小时前
SQL-leetcode— 2356. 每位教师所教授的科目种类的数量
数据库
一水鉴天2 小时前
整体设计 之定稿 “凝聚式中心点”原型 --整除:智能合约和DBMS的在表层挂接 能/所 依据的深层套接 之2
数据库·人工智能·智能合约
翔云1234563 小时前
Python 中 SQLAlchemy 和 MySQLdb 的关系
数据库·python·mysql
孙霸天3 小时前
Ubuntu20系统上离线安装MongoDB
数据库·mongodb·ubuntu·备份还原
Java 码农3 小时前
nodejs mongodb基础
数据库·mongodb·node.js
TDengine (老段)3 小时前
TDengine IDMP 运维指南(4. 使用 Docker 部署)
运维·数据库·物联网·docker·时序数据库·tdengine·涛思数据
TDengine (老段)3 小时前
TDengine IDMP 最佳实践
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
三劫散仙4 小时前
mac m1上使用Kerberos访问远程linux hadoop集群的正确姿势
linux·hadoop·macos