SQL查询结果到databricks notebook中的pandas df

cgh8pdjw  于 2023-06-20  发布在  其他
关注(0)|答案(4)|浏览(143)

我有一个sql查询结果,我想转换成一个Pandasdf内的databricks笔记本。查询从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?

z9smfwbn

z9smfwbn1#

下面是我在databricks文档中发现的内容-在一个Databricks Python笔记本中,来自SQL语言单元格的表结果自动作为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

nwwlzxa7

nwwlzxa72#

ur_query = 'select * from apple'
df = spark.sql(ur_query)

nzk0hqpo

nzk0hqpo3#

答案在其他地方已经讨论过,所以我在这里重复一遍。你只需要这样做。

df=_sqldf.toPandas()
5t7ly7z5

5t7ly7z54#

你有没有试过使用spark dataframe来代替pandas df?两者有一些共同的功能。使用spark df,您仍然可以在databricks中使用spark的功能,而不是pandas,其中df将仅使用您计算机的核心,这可能会返回内存错误,特别是如果您正在处理xx GB的数据。要做到这一点,工作是像往常一样创建表,同时可以直接使用查询作为要创建的表的源。

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

上面的查询会说没有输出,但是因为你只创建了一个表。然后运行以下命令创建一个spark dataframe:

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

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

相关问题