使用 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。