使用 pySpark 将 DataFrame 写入 mysql 表
Posted
技术标签:
【中文标题】使用 pySpark 将 DataFrame 写入 mysql 表【英文标题】:Write DataFrame to mysql table using pySpark 【发布时间】:2017-10-03 19:39:29 【问题描述】:我正在尝试将记录插入到mysql
表中。该表包含id
和name
作为列。
我在pyspark
shell 中执行如下操作。
name = 'tester_1'
id = '103'
import pandas as pd
l = [id,name]
df = pd.DataFrame([l])
df.write.format('jdbc').options(
url='jdbc:mysql://localhost/database_name',
driver='com.mysql.jdbc.Driver',
dbtable='DestinationTableName',
user='your_user_name',
password='your_password').mode('append').save()
我收到以下属性错误
AttributeError: 'DataFrame' object has no attribute 'write'
我做错了什么?从pySpark
向MySql
表中插入记录的正确方法是什么
【问题讨论】:
【参考方案1】:使用 Spark DataFrame 而不是 pandas',因为
.write
仅适用于 Spark DataFrame
所以最终的代码可能是
data =['103', 'tester_1']
df = sc.parallelize(data).toDF(['id', 'name'])
df.write.format('jdbc').options(
url='jdbc:mysql://localhost/database_name',
driver='com.mysql.jdbc.Driver',
dbtable='DestinationTableName',
user='your_user_name',
password='your_password').mode('append').save()
【讨论】:
我收到以下错误java.lang.RuntimeException: org.apache.spark.sql.execution.datasources.jdbc.DefaultSource does not allow create table as select.
。有没有其他替代方案。
该表是否存在于数据源中并尝试使用mode
也。
我在下面得到这个错误 java.lang.RuntimeException: org.apache.spark.sql.execution.datasources.jdbc.DefaultSource does not allow create table as select.. 还有其他替代方法吗这个。
@Karn_way: 表存在于目标中还是正在创建中?
是的表确实存在。我正在使用带有 mysql 的 CDH 映像。我认为它已在 spark 2.0 中修复,在我的图像中它是 1.6以上是关于使用 pySpark 将 DataFrame 写入 mysql 表的主要内容,如果未能解决你的问题,请参考以下文章
如何将大型 Pyspark DataFrame 写入 DynamoDB
将大型 DataFrame 从 PySpark 写入 Kafka 遇到超时
将 Pyspark DataFrame 写入 Parquet 时出现 Py4JJavaError
Pyspark - 将数据帧写入 2 个不同的 csv 文件