在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

相关推荐
磁场转动100万匹17 小时前
Spark Core 核心原理:从 RDD 到分布式计算
大数据·分布式·spark
ha_lydms2 天前
AnalyticDB MySQL 技术架构
大数据·hadoop·mysql·adb·spark·dataworks·1024程序员节
红海云3 天前
两台DGX Spark部署DeepSeek的实战边界
大数据·分布式·spark
爱吃火鸡面呀5 天前
PySpark 入门实战:从 DataFrame 到 SQL、DSL 与窗口函数
分布式·spark
ha_lydms5 天前
Window Functions(窗口函数)
大数据·数据仓库·hadoop·spark·数据处理·dataworks·maxcompute
爱吃火鸡面呀5 天前
Spark RDD 行动算子(Action)详解
windows·ajax·spark
pjj198546 天前
Spark RDD 核心知识详解:算子、依赖与执行模型
大数据·分布式·spark
大鳥6 天前
JSON 解析最佳实践:从入门到生产级优化
hive·sql·spark·json
pjj198546 天前
Spark SQL 核心知识详解:DataFrame、DSL 与数据源
大数据·sql·spark
浔溺6 天前
Spark核心基石:RDD全方位深度解析(原理、算子、实战、优化)
大数据·分布式·spark