在 Azure Databricks 上设置 PostgreSQL 驱动程序

Posted

技术标签:

【中文标题】在 Azure Databricks 上设置 PostgreSQL 驱动程序【英文标题】:Setting up PostgreSQL driver on Azure Databricks 【发布时间】:2021-09-04 19:33:35 【问题描述】:

如何修改以下代码以安装 PostgreSQL JDBC 驱动程序而不是 MS SQL?我的目标是使用 pyodbc 从 Azure Databricks 连接到 Redshift 数据库。我认为 PostgreSQL JDBC 驱动程序已经默认安装在我的 Databricks 运行时中,但是当我运行 pyodbc.drivers() 时,我得到的只是“['ODBC Driver 17 for SQL Server']”,所以我猜不是。一旦安装了 PostgreSQL 驱动程序,pyodbc.connect() 字符串会是什么样子?如果更简单,我们可以改用 Amazon 推荐的 Redshift JDBC 驱动程序。

curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
ACCEPT_EULA=Y apt-get install msodbcsql17
apt-get -y install unixodbc-dev
sudo apt-get install python3-pip -y
pip3 install --upgrade pyodbc

【问题讨论】:

【参考方案1】:

你需要改变你的方法并使用correct instructions to install and configure the Redshift driver:

    通过apt-get安装unixodbc-dev 下载 64 位 Debian 软件包(实际链接在文档中) 使用以下信息修改odbcinst.ini(您可以将该文件存储在DBFS上并从中复制,或者将/opt/amazon/redshiftodbc/lib/64/amazon.redshiftodbc.ini复制到odbcinst.ini):
[ODBC Drivers]
Amazon Redshift (x64)=Installed

[Amazon Redshift (x64)]
Description=Amazon Redshift ODBC Driver (64-bit)
Driver=/opt/amazon/redshiftodbc/lib/64/libamazonredshiftodbc64.so
    通过pip安装pyodbc

所有这些步骤最好作为可以附加到集群的初始化脚本来实现。

附:但是您真的需要通过 ODBC 工作吗?为什么不使用 Databricks 提供的更具扩展性的spark-redshift connector?

【讨论】:

这些说明适用于 Linux;我正在使用 Windows 环境。你能修改说明吗? 您是在谈论从 Azure Databricks 环境连接还是从本地 Windows 机器连接?如果是前者,那就是 Linux Azure 数据块,但是当我下载 Debian 文件时,我无法查看这些文件。我认为我们必须将 windows 文件下载到我的 windows 桌面,然后将其上传到 databricks。 只需将所有shell命令,如curl等初始化shell脚本,上传到dbfs并作为初始化脚本添加到集群中 我没有完全理解。您介意准确说明我应该在脚本中添加什么以附加到集群吗?

以上是关于在 Azure Databricks 上设置 PostgreSQL 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure 数据工厂的 Databricks 上运行 .Net spark 作业?

使用 azure databricks 读取 azure databricks 日志 json 文件

如何使用 Azure Synapse 在 Databricks 上删除表或删除行?

在 Azure 中检查 Databricks 运行时的版本

Azure Databricks 在 Blob 存储上打开文件时出现问题

Databricks Connect:无法连接到 azure 上的远程集群,命令:“databricks-connect test”停止