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: 目标表名。user和password: 数据库的用户名和密码。mode: 写入模式,append表示追加数据,overwrite表示覆盖目标表。
4. 注意事项
-
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 -
MySQL 表结构
在写入数据之前,确保 MySQL 数据库中已经存在目标表,并且表结构与 CSV 文件的列匹配。如果表不存在,可以使用mode="ignore"来跳过写入,或者手动创建表。 -
数据类型匹配
如果 CSV 文件中的数据类型与 MySQL 表中的数据类型不匹配,可能会导致写入失败。可以通过df.printSchema()查看 DataFrame 的数据类型,并在 MySQL 中调整表结构。 -
性能优化
如果数据量较大,可以考虑使用分区写入或调整 Spark 的并行度。
通过以上步骤,你可以轻松地将 CSV 文件中的数据读取到 Spark 中,并将其写入 MySQL 数据库。