sparkSQL读入csv文件写入mysql

134 阅读2分钟

1. 环境准备

确保你已经安装了以下组件:

  • Apache Spark
  • MySQL 数据库
  • MySQL JDBC 驱动(确保 Spark 能够连接 MySQL 数据库)

2. 代码实现

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

Python

复制

from pyspark.sql import SparkSession

# 创建 SparkSession
spark = SparkSession.builder \
    .appName("CSV to MySQL") \
    .getOrCreate()

# 读取 CSV 文件
csv_file_path = "path/to/your/csvfile.csv"  # 替换为你的 CSV 文件路径
df = spark.read.csv(csv_file_path, header=True, inferSchema=True)

# 查看读取的数据
df.show()

# 配置 MySQL 数据库连接信息
mysql_url = "jdbc:mysql://your-mysql-host:3306/your-database-name"  # 替换为你的 MySQL 服务器地址和数据库名称
mysql_table = "your_table_name"  # 替换为你的 MySQL 表名
mysql_user = "your-username"  # 替换为你的 MySQL 用户名
mysql_password = "your-password"  # 替换为你的 MySQL 密码

# 将 DataFrame 写入 MySQL 数据库
df.write \
    .format("jdbc") \
    .option("url", mysql_url) \
    .option("dbtable", mysql_table) \
    .option("user", mysql_user) \
    .option("password", mysql_password) \
    .mode("append")  # 或者使用 "overwrite" 覆盖表
    .save()

# 停止 SparkSession
spark.stop()

3. 代码说明

  • SparkSession: 用于初始化 Spark 应用程序。

  • spark.read.csv: 读取 CSV 文件,header=True 表示 CSV 文件的第一行是列名,inferSchema=True 表示自动推断数据类型。

  • df.show() : 查看 DataFrame 的内容,确认数据是否正确读取。

  • df.write.format("jdbc") : 将 DataFrame 写入 MySQL 数据库。

    • url: MySQL 数据库的连接地址。
    • dbtable: 目标表名。
    • userpassword: 数据库的用户名和密码。
    • mode: 写入模式,append 表示追加数据,overwrite 表示覆盖目标表。

4. 注意事项

  1. MySQL JDBC 驱动
    确保在 Spark 的 lib 目录下放置了 MySQL JDBC 驱动(mysql-connector-java-x.x.xx.jar),或者在启动 Spark 时通过 --jars 参数指定驱动路径。

    bash

    复制

    spark-submit --jars mysql-connector-java-x.x.xx.jar your_script.py
    
  2. MySQL 表结构
    在写入数据之前,确保 MySQL 数据库中已经存在目标表,并且表结构与 CSV 文件的列匹配。如果表不存在,可以使用 mode="ignore" 来跳过写入,或者手动创建表。

  3. 数据类型匹配
    如果 CSV 文件中的数据类型与 MySQL 表中的数据类型不匹配,可能会导致写入失败。可以通过 df.printSchema() 查看 DataFrame 的数据类型,并在 MySQL 中调整表结构。

  4. 性能优化
    如果数据量较大,可以考虑使用分区写入或调整 Spark 的并行度。

通过以上步骤,你可以轻松地将 CSV 文件中的数据读取到 Spark 中,并将其写入 MySQL 数据库。