You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Microsoft Fabric笔记本:Spark SQL临时表转Python DataFrame优化方案问询

针对Microsoft Fabric笔记本跨语言单元数据复用的优化方案

1. 关于CTE跨单元引用的说明

你提到的WITH data AS (SELECT [columns] FROM [table])属于Spark SQL的临时CTE(公共表表达式),它仅在当前SQL代码单元的执行周期内有效,执行完毕后就会被销毁,无法直接在后续Python单元中通过dataframe = data这种方式引用。

2. 跨单元共享数据的正确方法

要实现Spark SQL单元与Python单元的数据复用,需要将查询结果注册为临时视图或全局临时视图:

方法一:创建普通临时视图(当前会话内有效)

在Spark SQL单元中执行:

CREATE OR REPLACE TEMP VIEW data_view AS
SELECT [columns] FROM [table];

然后在Python单元中读取视图并转换为DataFrame:

# 读取临时视图得到PySpark DataFrame
spark_df = spark.sql("SELECT * FROM data_view")
# 按需转换为Pandas DataFrame(注意:大表转换可能引发内存不足)
pandas_df = spark_df.toPandas()

方法二:创建全局临时视图(跨会话有效)

如果需要在多个笔记本会话间共享数据,可创建全局临时视图:

CREATE OR REPLACE GLOBAL TEMP VIEW global_data_view AS
SELECT [columns] FROM [table];

Python单元中读取时需指定global_temp数据库:

spark_df = spark.sql("SELECT * FROM global_temp.global_data_view")
pandas_df = spark_df.toPandas()

3. 更优处理建议

  • 减少不必要的Pandas转换:toPandas()会将数据拉取到Driver节点内存,大表场景易触发OOM。优先用PySpark API处理数据,仅在需要Pandas专属功能(如复杂统计、可视化)时再转换。
  • Python内直接执行SQL:如果无需拆分单元,可直接在Python中编写SQL查询,减少单元切换成本:
query = """
SELECT [columns] FROM [table]
"""
spark_df = spark.sql(query)
pandas_df = spark_df.toPandas()
  • 利用Fabric Lakehouse原生读取:若数据来自Fabric Lakehouse,可直接通过spark.read.table("[table]")读取为PySpark DataFrame,无需先创建视图。

内容的提问来源于stack exchange,提问作者James Allen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:07:35