在scala中sparkSQL连接masql并添加新数据

以下是 Scala 中使用 Spark SQL 连接 MySQL 并添加数据的完整代码示例(纯文本):

  1. 准备连接参数(需替换实际信息)

scala

val jdbcUrl = "jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf-8"

val tableName = "users" // 目标表名

val user = "root"

val password = "your_password"

val driverClass = "com.mysql.cj.jdbc.Driver" // MySQL 8+ 驱动类(5.x 用 com.mysql.jdbc.Driver)

  1. 创建 SparkSession

scala

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder()

.appName("Spark SQL MySQL Insert")

.master("local\*") // 单机模式,集群改为 "yarn" 等

.getOrCreate()

  1. 生成待插入数据(示例 DataFrame)

scala

import spark.implicits._

// 示例数据:插入两条用户记录(假设表结构为 id INT, name STRING, age INT)

val newData = Seq(

(3, "Alice", 28),

(4, "Bob", 30)

).toDF("id", "name", "age")

  1. 写入数据到 MySQL(追加模式)

scala

newData.write.jdbc(

url = jdbcUrl,

table = tableName,

mode = "append", // 写入模式:append(追加)、overwrite(覆盖)等

properties = new java.util.Properties() {{

setProperty("user", user)

setProperty("password", password)

setProperty("driver", driverClass)

}}

)

关键说明

  1. 写入模式(mode):
  • append :数据追加到现有表(表需存在)。

  • overwrite :覆盖现有表(需注意权限和数据安全)。

  • ignore :忽略重复数据(需表有唯一约束)。

  • failIfExists :表存在时抛出异常(默认模式)。

  1. 表结构要求:
  • 目标表需提前创建,字段类型需与 DataFrame 匹配(如 id 对应 INT , name 对应 VARCHAR )。
  1. 驱动与版本适配:
  • 若报 ClassNotFoundException ,检查驱动是否正确部署(通过 --jars 参数或放入 $SPARK_HOME/jars/ )。

  • MySQL 5.x 和 8.x 驱动类名不同,需对应修改 driverClass 。

  1. 批量写入优化:
  • 可添加参数 ?rewriteBatchedStatements=true 到 jdbcUrl 中,提升批量插入性能:

scala

val jdbcUrl = "jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true"

完整代码整合

scala

import org.apache.spark.sql.SparkSession

import spark.implicits._

object SparkMySQLInsert {

def main(args: ArrayString): Unit = {

// 连接参数

val jdbcUrl = "jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf-8"

val tableName = "users"

val user = "root"

val password = "your_password"

val driverClass = "com.mysql.cj.jdbc.Driver"

// 创建 SparkSession

val spark = SparkSession.builder()

.appName("Spark SQL MySQL Insert")

.master("local\*")

.getOrCreate()

// 生成待插入数据

val newData = Seq(

(3, "Alice", 28),

(4, "Bob", 30)

).toDF("id", "name", "age")

// 写入数据

newData.write.jdbc(

url = jdbcUrl,

table = tableName,

mode = "append",

properties = new java.util.Properties() {{

setProperty("user", user)

setProperty("password", password)

setProperty("driver", driverClass)

}}

)

spark.stop()

}

}

执行时需通过 spark-submit 命令提交,并指定 MySQL 驱动包:

bash

spark-submit --jars /path/to/mysql-connector-java.jar your_app.jar

相关推荐
木圭的AI时代指南5 小时前
Spark-X2.5 长输入 Agent 实测:全量读取陷阱与解释器寻找死循环复盘,附可复现任务
大数据·分布式·spark
Q264336502313 小时前
【有源码】基于机器学习的电信网络诈骗话术语义识别与可视化分析系统 XGBoost算法+Hadoop+Spark
大数据·hadoop·算法·机器学习·spark·毕业设计·课程设计
Q264336502314 小时前
【有源码】基于 Hadoop 的强化学习智能体轨迹数据挖掘与可视化分析系统大数据毕设项目
大数据·hadoop·机器学习·数据挖掘·spark·课程设计·数据可视化
Q264336502317 小时前
【有源码】基于大数据的药品多维度属性分析可视化系统 基于Spark的药品属性聚类与关联规则可视化分析系统
hadoop·机器学习·数据挖掘·spark·毕业设计·课程设计·大数据项目
Q264336502317 小时前
【有源码】基于大数据的零售交易者行为特征与生存状况数据分析及可视化 Hadoop+Spark大数据项目
大数据·hadoop·信息可视化·数据挖掘·数据分析·spark·毕业设计
Q264336502320 小时前
【有源码】基于 Hadoop 生态的化妆品销售数据存储分析与可视化 面向化妆品行业的用户画像构建与销售机会识别研究
大数据·hadoop·python·机器学习·spark·毕业设计·课程设计
计算机源码社2 天前
基于Hadoop+Spark的黄金市场历史数据特征分析与可视化大屏 基于K-Means聚类算法的黄金历史价格阶段划分研究
大数据·hadoop·python·数据挖掘·数据分析·spark·毕业设计
AIsocial3 天前
Spark Ads怎么用?自然流量测试内容,再用付费流量放大
spark·tiktok
IT毕设梦工厂3 天前
计算机毕业设计选题推荐:基于大数据的印度上市公司财务指标数据可视化分析|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·python·信息可视化·spark·课程设计·大数据毕设项目
BYSJMG4 天前
计算机毕业设计选题推荐:基于大数据的水质多指标关联分析与可视化的设计与实现,Spark 加 K-Means 做水质分群
大数据·hadoop·信息可视化·数据分析·spark·kmeans·课程设计