sparkSQL读入csv文件写入mysql

下面是一个完整的示例,展示如何使用SparkSQL读取CSV文件并将数据写入MySQL数据库。

  1. 准备工作

首先确保你有:

  1. 运行中的Spark环境

  2. MySQL数据库连接信息

  3. 适当的JDBC驱动

  4. 示例代码

Scala版本

Scala 复制代码
import org.apache.spark.sql.{SparkSession, SaveMode}

object CsvToMysql {
  def main(args: Array[String]): Unit = {
    // 创建SparkSession
    val spark = SparkSession.builder()
      .appName("CSV to MySQL")
      .master("local[*]") // 本地模式,生产环境去掉这行
      .getOrCreate()

    // 读取CSV文件
    val df = spark.read
      .option("header", "true") // 第一行作为header
      .option("inferSchema", "true") // 自动推断数据类型
      .csv("path/to/your/file.csv") // CSV文件路径

    // 显示数据
    df.show()

    // MySQL连接配置
    val jdbcUrl = "jdbc:mysql://localhost:3306/your_database"
    val connectionProperties = new java.util.Properties()
    connectionProperties.put("user", "your_username")
    connectionProperties.put("password", "your_password")
    connectionProperties.put("driver", "com.mysql.jdbc.Driver")

    // 写入MySQL
    df.write
      .mode(SaveMode.Overwrite) // 如果表存在则覆盖
      .jdbc(jdbcUrl, "your_table", connectionProperties)

    spark.stop()
  }
}

Python (PySpark)版本

python 复制代码
from pyspark.sql import SparkSession

# 创建SparkSession
spark = SparkSession.builder \
    .appName("CSV to MySQL") \
    .config("spark.jars", "/path/to/mysql-connector-java-8.0.23.jar") \  # MySQL驱动路径
    .getOrCreate()

# 读取CSV文件
df = spark.read \
    .option("header", "true") \
    .option("inferSchema", "true") \
    .csv("path/to/your/file.csv")

# 显示数据
df.show()

# MySQL连接配置
jdbc_url = "jdbc:mysql://localhost:3306/your_database"
connection_properties = {
    "user": "your_username",
    "password": "your_password",
    "driver": "com.mysql.jdbc.Driver"
}

# 写入MySQL
df.write \
    .mode("overwrite") \  # 可选: "append", "ignore", "error" (默认)
    .jdbc(jdbc_url, "your_table", properties=connection_properties)

spark.stop()
  1. 关键点说明

  2. CSV读取选项:

`header`: 是否将第一行作为列名

`inferSchema`: 是否自动推断数据类型

其他可选参数:`delimiter`, `quote`, `escape`, `nullValue`等

  1. 写入模式:

`overwrite`: 覆盖现有表

`append`: 追加数据

`ignore`: 表存在时不做任何操作

`error`或`errorifexists`(默认): 表存在时报错

  1. MySQL连接:

需要MySQL JDBC驱动

驱动可以:

通过`--jars`参数在spark-submit时指定

在代码中通过`spark.jars`配置指定

放在Spark的`jars`目录下

  1. 性能优化:

批量写入:`connectionProperties.put("batchsize", "10000")`

并行写入:`df.repartition(10).write...` (根据数据量调整分区数)

  1. 运行方式

对于Scala项目,打包后使用spark-submit运行:

bash 复制代码
spark-submit --class CsvToMysql \
  --jars /path/to/mysql-connector-java-8.0.23.jar \
  your_application.jar

对于Python脚本:

bash 复制代码
spark-submit --jars /path/to/mysql-connector-java-8.0.23.jar \
  your_script.py
  1. 常见问题解决

  2. 驱动类找不到:

①确保驱动jar包路径正确

②检查驱动版本与MySQL版本兼容

  1. 连接拒绝:

①检查MySQL服务是否运行

②检查用户名密码是否正确

③检查MySQL是否允许远程连接

  1. 权限问题:

确保数据库用户有创建表和写入数据的权限

  1. 数据类型不匹配:

①可以在写入前使用`df.printSchema()`检查数据类型

②必要时使用`cast()`函数转换数据类型

相关推荐
虾条_花吹雪34 分钟前
5、Spring AI(MCPServer+MCPClient+Ollama)开发环境搭建_第一篇
数据库·人工智能·学习·spring·ai
一 乐6 小时前
民宿|基于java的民宿推荐系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·源码
鹏码纵横6 小时前
已解决:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 异常的正确解决方法,亲测有效!!!
java·python·mysql
美林数据Tempodata8 小时前
大模型驱动数据分析革新:美林数据智能问数解决方案破局传统 BI 痛点
数据库·人工智能·数据分析·大模型·智能问数
野槐8 小时前
node.js连接mysql写接口(一)
数据库·mysql
Zzzone6839 小时前
PostgreSQL日常维护
数据库·postgresql
chxii9 小时前
1.13使用 Node.js 操作 SQLite
数据库·sqlite·node.js
冰刀画的圈9 小时前
修改Oracle编码
数据库·oracle
这个胖子不太裤9 小时前
Django(自用)
数据库·django·sqlite
麻辣清汤9 小时前
MySQL 索引类型及其必要性与优点
数据库·mysql