在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: Array[String]): 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

相关推荐
百度Geek说18 小时前
搜索数据建设系列之数据架构重构
数据仓库·重构·架构·spark·dubbo
大数据CLUB1 天前
基于spark的航班价格分析预测及可视化
大数据·hadoop·分布式·数据分析·spark·数据可视化
Cachel wood10 天前
Spark教程6:Spark 底层执行原理详解
大数据·数据库·分布式·计算机网络·spark
大数据CLUB11 天前
基于pyspark的北京历史天气数据分析及可视化_离线
大数据·hadoop·数据挖掘·数据分析·spark
Cachel wood11 天前
Spark教程1:Spark基础介绍
大数据·数据库·数据仓库·分布式·计算机网络·spark
张昕玥2023032211911 天前
Spark应用开发--WordCount实战
大数据·spark
阳光下是个孩子11 天前
基于 Spark 实现 COS 海量数据处理
大数据·分布式·spark
GawynKing11 天前
Apache SeaTunnel Spark引擎执行流程源码分析
spark·源码·seatunnel
heart000_112 天前
大数据≠大样本:基于Spark的特征降维实战(提升10倍训练效率)
大数据·分布式·spark
254054652012 天前
710SJBH基于Apriori算法的学籍课程成绩关联规则挖掘研究
大数据·算法·spark