sql 在 databricks notebook 中查询结果到 pandas df

sql query results to pandas df within databricks notebook

我有一个 sql 查询结果,我想将其转换为数据块笔记本中的 pandas df。查询正在从 dbx 表中提取数据,如果知道这一点很重要的话。

我的查询看起来像这样:

With cte1 as (
   SELECT col1, col2 FROM Table1),
cte2 as(
   SELECT col10, col12 FROM Table2)

SELECT * FROM cte1 JOIN cte2 on col1=col10

我得到了我正在寻找的结果,然后我想在数据块中将其转换为 pandas df。 我尝试的最后一个是在我上次谷歌搜索后使用 from pyspark.sql import SQLContext,虽然我找不到任何特定于我意图的东西,但它会抛出 sql 错误。

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

df = sqlContext.sql("""
With cte1 as (
   SELECT col1, col2 FROM Table1),
cte2 as(
   SELECT col10, col12 FROM Table2)

SELECT * FROM cte1 JOIN cte2 on col1=col10
"""
)

有没有办法将 sql 查询结果转换为 databricks notebook 中的 pandas df?

您是否尝试过使用 spark 数据框而不是 pandas df?不知何故,两者共享一些共同的功能。使用 spark df,您仍然在 databricks 中利用 spark 的强大功能,而不是 pandas,其中 df 将仅使用您计算机的核心,这可能 return 内存错误,尤其是如果您使用 xx GB数据的。为此,有效的方法是像往常一样创建 table,同时您可以直接使用查询作为要创建的 table 的来源。

CREATE TABLE newTable as 
    SELECT * FROM
       ( SELECT col1, col2 FROM Table1 ) t1 
    JOIN
       ( SELECT col10, col12 FROM Table2) t2
    ON col1=col10

上面的查询会说没有输出,但是因为你只创建了一个table。然后 运行 下面创建一个 spark 数据帧:

dataframe = sqlContext.sql('select * from newTable')

然后使用 spark 函数执行您的分析。提醒一下,如果你的 databricks notebook 默认为其他语言 Python,请确保使用魔术命令 %python 始终 运行 你的命令单元格。您可以从 dataframe.printSchema() 开始,这类似于 pd.info()dataframe.columns 列出所有列,dataframe.show(5) 列出 5 个结果,依此类推。

这是我在数据块文档中找到的内容 - 在 Databricks Python 笔记本中,来自 SQL 语言单元格的 table 结果自动作为 Python DataFrame 提供。 Python DataFrame 的名称是 _sqldf。

https://docs.databricks.com/notebooks/notebooks-use.html#explore-sql-cell-results-in-python-notebooks-natively-using-python

在 Python 笔记本中,DataFrame _sqldf 不会自动保存,而是替换为最近 SQL 单元格 运行 的结果。要保存 DataFrame,运行 此代码位于 Python 单元格中: new_dataframe_name = _sqldf