使用 JDBC 从 Dataframe 源复制到 SQL 服务器目标
Copy from Dataframe Source to SQL Server Destination using JDBC
我在 Databricks 的 Python 环境中工作。我想应该有几种方法可以将数据帧复制到 SQL 服务器中的 table。这是我正在测试的两个代码示例。
# Saving data to a JDBC source
jdbcDF.write \
.format("jdbc") \
.option("url", "jdbc:postgresql:dbserver") \
.option("dbtable", "schema.tablename") \
.option("user", "username") \
.option("password", "password") \
.save()
jdbcDF2.write \
.jdbc("jdbc:postgresql:dbserver", "schema.tablename",
properties={"user": "username", "password": "password"})
在这两种情况下,我都在第一行收到错误消息:
'DataFrame' object has no attribute 'write'
我正在阅读此处的文档。
https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html
我按照我需要的方式设置了数据框(来源)。我在 SQL 服务器中有一个 table,它具有所有匹配的字段名称和 varchar 数据类型(目标)。我只需要从源复制到目的地。我怎样才能做到这一点? TIA!
只是根据你的错误信息,我认为你的示例代码中的jdbcDF
对象应该不是pyspark.sql.dataframe.DataFrame
, may be just pandas.core.frame.DataFrame
.
所以你得到的错误是'DataFrame' object has no attribute 'write'
。如果我的判断是正确的,你需要通过下面的代码将pandas数据帧转换为PySpark数据帧来修复它。
spark_jdbcDF = spark.createDataFrame(pandas_jdbcDF)
然后将其写入SQL服务器。
同时,如果您的目标是 SQL 服务器,代码中的 jdbc
信息是针对 postgresql
,而不是 SQL 服务器。
所以需要先安装MS SQL Server的jdbc驱动,如下图
图 1. 在 Libraries
选项卡的 Install New
对话框的 Maven
选项卡中单击 Search Packages
link。
图 2. 切换到 Maven central
以在 com.microsoft.sqlserver
中搜索 jdbc。
然后,将jdbc url for MS SQL Server 改成如下,可以参考官方文档Step 3: Proof of concept connecting to SQL using Java
jdbc:sqlserver://yourserver.database.windows.net:1433;
否则,您也可以通过函数 pandas.DataFrame.to_sql
with a SQLAlchemy 连接 MS SQL 服务器直接将 pandas 数据帧写入 SQL 服务器 table。
我在 Databricks 的 Python 环境中工作。我想应该有几种方法可以将数据帧复制到 SQL 服务器中的 table。这是我正在测试的两个代码示例。
# Saving data to a JDBC source
jdbcDF.write \
.format("jdbc") \
.option("url", "jdbc:postgresql:dbserver") \
.option("dbtable", "schema.tablename") \
.option("user", "username") \
.option("password", "password") \
.save()
jdbcDF2.write \
.jdbc("jdbc:postgresql:dbserver", "schema.tablename",
properties={"user": "username", "password": "password"})
在这两种情况下,我都在第一行收到错误消息:
'DataFrame' object has no attribute 'write'
我正在阅读此处的文档。 https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html
我按照我需要的方式设置了数据框(来源)。我在 SQL 服务器中有一个 table,它具有所有匹配的字段名称和 varchar 数据类型(目标)。我只需要从源复制到目的地。我怎样才能做到这一点? TIA!
只是根据你的错误信息,我认为你的示例代码中的jdbcDF
对象应该不是pyspark.sql.dataframe.DataFrame
, may be just pandas.core.frame.DataFrame
.
所以你得到的错误是'DataFrame' object has no attribute 'write'
。如果我的判断是正确的,你需要通过下面的代码将pandas数据帧转换为PySpark数据帧来修复它。
spark_jdbcDF = spark.createDataFrame(pandas_jdbcDF)
然后将其写入SQL服务器。
同时,如果您的目标是 SQL 服务器,代码中的 jdbc
信息是针对 postgresql
,而不是 SQL 服务器。
所以需要先安装MS SQL Server的jdbc驱动,如下图
图 1. 在 Libraries
选项卡的 Install New
对话框的 Maven
选项卡中单击 Search Packages
link。
图 2. 切换到 Maven central
以在 com.microsoft.sqlserver
中搜索 jdbc。
然后,将jdbc url for MS SQL Server 改成如下,可以参考官方文档Step 3: Proof of concept connecting to SQL using Java
jdbc:sqlserver://yourserver.database.windows.net:1433;
否则,您也可以通过函数 pandas.DataFrame.to_sql
with a SQLAlchemy 连接 MS SQL 服务器直接将 pandas 数据帧写入 SQL 服务器 table。