【发布时间】:2021-10-28 03:00:30
【问题描述】:
我正在尝试使用带有预定 Spark 作业的 Apache Airflow 开发一些数据管道。
对于其中一个管道,我正在尝试将数据从 PySpark DataFrame 写入 MySQL,但我一直遇到一些问题。这只是我的代码现在的样子,但我确实想在未来为此添加更多转换,
df_tsv = spark.read.csv(tsv_file, sep=r'\t', header=True)
df_tsv.write.jdbc(url=mysql_url, table=mysql_table, mode="append", properties={"user":mysql_user, "password": mysql_password, "driver": "com.mysql.cj.jdbc.Driver" })
这是不断引发的异常,
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
我想知道的第一件事是如何解决上述问题。
其次,我想知道将数据从 Spark 写入 MySQL 等数据库时的最佳实践是什么。例如,是否可以选择将 DataFrame 中给定列的数据存储在表中的指定列中?还是表的列名应该和DataFrame的列名一样?
我能想到的另一个选择是将 DataFrame 转换为元组列表,然后使用 mysql-python-connector 之类的东西将数据加载到数据库中,
rdd = df.rdd
b = rdd.map(tuple)
data = b.collect()
# write data to database using mysql-python-connector
这里有什么更有效的选择?还有其他我不知道的选项吗?
【问题讨论】:
标签: python mysql pyspark apache-spark-sql airflow