【问题标题】:Copy from Dataframe Source to SQL Server Destination using JDBC使用 JDBC 从数据框源复制到 SQL Server 目标
【发布时间】:2019-11-26 22:39:50
【问题描述】:

我在 Databricks 的 Python 环境中工作。我想应该有几种方法可以将数据框复制到 SQL Server 中的表中。这是我正在测试的两个代码示例。

# 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 Server 中有一个表,其中包含所有匹配的字段名称和 varchar 数据类型(目标)。我只需要从源复制到目标。我怎样才能做到这一点?蒂亚!

【问题讨论】:

    标签: python sql-server python-3.x dataframe databricks


    【解决方案1】:

    根据你的错误信息,我认为你在示例代码中的jdbcDF对象不应该是pyspark.sql.dataframe.DataFrame,可能只是pandas.core.frame.DataFrame

    所以你得到的错误是'DataFrame' object has no attribute 'write'。如果我的判断是正确的,你需要通过下面的代码将pandas数据帧转换为PySpark数据帧来修复它。

    spark_jdbcDF = spark.createDataFrame(pandas_jdbcDF)
    

    然后将其写入 SQL Server。

    同时,如果您的目标是 SQL Server,则代码中的 jdbc 信息是针对 postgresql,而不是针对 SQL Server。

    所以需要先安装MS SQL Server的jdbc驱动,如下图。

    图 1. 单击Libraries 选项卡的Install New 对话框的Maven 选项卡中的Search Packages 链接。

    图 2. 切换到 Maven central 以在 com.microsoft.sqlserver 中搜索 jdbc。

    然后,修改MS SQL Server的jdbc url,如下图,可以参考官方文档Step 3: Proof of concept connecting to SQL using Java

    jdbc:sqlserver://yourserver.database.windows.net:1433;
    

    否则,您也可以通过函数pandas.DataFrame.to_sql 直接将pandas 数据帧写入SQL Server 表,并为MS SQL Server 提供SQLAlchemy 连接。

    【讨论】:

    • 有更快的方法吗?如果写入同一个数据库,使用df.write.jdbcpandas.DataFrame.to_sql 有什么优势吗?
    猜你喜欢
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多