如何在 Python 3 中使用 Databricks 中的 python snowflake 连接器连接到 Snowflake?

How to connect to Snowflake using python snowflake connector from within Databricks in Python 3?

当我尝试将 snowflake-sqlalchemy 库附加到 Databricks 中的 Python 3 集群时,它破坏了我的 python 构建,并且在我安装后续库时出现以下错误:

AttributeError: cffi library '_openssl' has no function, constant or global variable named 'Cryptography_HAS_ED25519'

我曾尝试将最新版本的密码学库单独附加到集群,但这给了我同样的问题。我认为这可能与以下link有关:

connecting-to-snowflake-from-azure-databricks-notebook-message-openssl-has-no-function-constant-or-global-variable-named-cryptography

https://github.com/snowflakedb/snowflake-connector-python/issues/32

在第二个 link 中提到了一个解决方法:

The workaround is:
Uninstall cryptography by running pip uninstall cryptography
Delete the directory .../site-packages/cryptography/ manually
Reinstall snowflake-connector-python

Looks like the directory structure of cryptography changed since 1.7.2.*

是否有任何方法可以卸载 Databricks 中预安装的密码学 1.5 python 库,以便我可以使用新的目录结构重新安装最新版本的密码学 (2.5)?

过时的库:

%sh sudo apt-get install python3-pip -y

其次是:

%sh pip3 install --upgrade snowflake-connector-python

有关详细信息,请参阅 https://datathirst.net/blog/2019/1/11/databricks-amp-snowflake-python-errors

我找到了问题的答案。

这个问题是由于 Databricks 中的 openssl 版本太旧导致 snowflake-sqlalchemy 无法使用它。

解决方法如下:

  1. 升级画中画

    %sh /databricks/python/bin/pip 安装 --upgrade pip

  2. 卸载 pyopenssl

    %sh /databricks/python/bin/pip 卸载 pyopenssl -y

  3. 安装pyopenssl

    %sh /databricks/python/bin/pip 安装 --upgrade pyopenssl

  4. 安装雪花-sqlalchemy

    %sh /databricks/python/bin/pip 安装 --upgrade snowflake-sqlalchemy

这个问题的答案很有帮助:

我使用以下代码创建了一个初始化文件:

dbutils.fs.mkdirs("dbfs:/databricks/init/")

dbutils.fs.put("dbfs:/databricks/init/sf-initiation.sh" ,"""
#!/bin/bash
/databricks/python/bin/pip install --upgrade pip
/databricks/python/bin/pip uninstall pyopenssl -y
/databricks/python/bin/pip install --upgrade pyopenssl
/databricks/python/bin/pip install --upgrade snowflake-sqlalchemy
""", True)

文件中的最后一个命令更新所有过时的包,如下所示: Upgrading all packages with pip