我有一个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?
4条答案
按热度按时间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
nwwlzxa72#
ur_query = 'select * from apple'
df = spark.sql(ur_query)
nzk0hqpo3#
答案在其他地方已经讨论过,所以我在这里重复一遍。你只需要这样做。
5t7ly7z54#
你有没有试过使用spark dataframe来代替pandas df?两者有一些共同的功能。使用spark df,您仍然可以在databricks中使用spark的功能,而不是pandas,其中df将仅使用您计算机的核心,这可能会返回内存错误,特别是如果您正在处理xx GB的数据。要做到这一点,工作是像往常一样创建表,同时可以直接使用查询作为要创建的表的源。
上面的查询会说没有输出,但是因为你只创建了一个表。然后运行以下命令创建一个spark dataframe:
然后使用spark函数执行分析。提醒一下,如果您的databricks notebook默认为Python以外的其他语言,请确保始终使用神奇的命令
%python
运行命令单元格。您可以从dataframe.printSchema()
开始,它类似于pd.info()
,dataframe.columns
列出所有列,dataframe.show(5)
列出5个结果,依此类推。