通过 Python 中的 Databricks api 读取 Databricks 表?

Posted

技术标签:

【中文标题】通过 Python 中的 Databricks api 读取 Databricks 表?【英文标题】:Read a Databricks table via Databricks api in Python? 【发布时间】:2021-03-19 18:16:32 【问题描述】:

使用 Python-3,我正在尝试将 Excel (xlsx) 工作表与 Databricks 中的相同 spark 表进行比较。我想避免在 Databricks 中进行比较。所以我正在寻找一种通过 Databricks api 读取 spark 表的方法。这可能吗?如何继续读取表:DB.TableName?

【问题讨论】:

这可能取决于这些数据的存储位置、底层使用的数据格式等。但实际上,存在的 API 需要在 Databricks 上运行某些东西。拥有集群并将其与 databricks-connect 一起使用,或者通过 JDBC/ODBC 驱动程序访问该集群,或者使用即将推出的 SQL Analytics(也通过 ODBC/JDBC) 【参考方案1】:

据我所知,没有办法从 DB API 读取表,除非您将它作为 LaTreb 已经提到的作业运行。但是,如果您真的愿意,您可以使用 ODBC 或 JDBC 驱动程序通过您的 databricks 集群获取数据。

关于如何设置的信息可以在here找到。

设置 DSN 后,您可以使用 pyodbc 连接到数据块并运行查询。此时 ODBC 驱动程序将只允许您运行 Spark-SQL 命令。

话虽如此,但将数据加载到 Databricks 中可能会更容易,除非您有某种安全问题。

【讨论】:

【参考方案2】:

我可以建议你在 notebook 中编写 pyspark 代码,从之前定义的作业中调用 notebook,并在本地机器和 databricks 工作区之间建立连接。

如果您愿意,您可以直接在 spark 上执行comaprision 或将数据帧转换为 pandas。如果noteebok 将结束comaprision,可能会重新运行特定作业的结果。我认为发送所有databricks表可能是不可能的,因为API限制你有火花集群来执行复杂的操作,API应该用来发送小消息。

官方文档: https://docs.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/jobs#--runs-get-output

检索运行的输出和元数据。当一个笔记本任务 通过 dbutils.notebook.exit() 调用返回一个值,您可以使用 此端点以检索该值。 Azure Databricks 对此进行了限制 API 返回输出的前 5 MB。为了返回更大的 结果,您可以将作业结果存储在云存储服务中。

【讨论】:

他想在 databricks 中进行比较:我想避免在 Databricks 中进行比较

以上是关于通过 Python 中的 Databricks api 读取 Databricks 表?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中读取 SQL 文件以通过 databricks 对 JDBC 运行

如何在 python 中比较 Databricks 笔记本中的两个模式

Databricks-Connect 还返回找不到多个 python 文件作业的模块

将python模块导入databricks中的python脚本

使用python截断Databricks中的增量表

用于列出 Azure Databricks 中每个子目录中的文件的 Python 代码