在Azure Synapse中如何导入Notebook并复用其中变量
在Azure Synapse中复用Notebook变量的有效方案
直接将Synapse Notebook作为Python包导入不可行,因为Notebook的执行环境是交互式的,且不在Python默认的模块搜索路径中。以下是几种可靠的实现方式:
方法1:使用%run魔术命令(推荐)
这是Synapse中复用Notebook代码和变量最直接的方式,%run会在当前Notebook的会话中完整执行目标Notebook的所有代码,执行后即可直接使用目标Notebook中定义的变量。
用法示例:
假设Notebook1的内容如下:
# Notebook1 中的代码 user_name = "Tarik" project_config = { "data_path": "/Workspace/MyData", "batch_size": 1000 }
在Notebook2中执行以下命令:
# 执行Notebook1,路径根据实际位置调整 %run /Workspace/Notebooks/Notebook1 # 直接使用Notebook1中的变量 print(f"Hello {user_name}") print(f"Config: {project_config}")
路径说明:
- 如果两个Notebook在同一文件夹下,直接写
%run Notebook1即可 - 完整路径格式为
%run /Workspace/[文件夹路径]/Notebook1
方法2:序列化变量到共享存储
如果需要跨会话复用变量(比如Notebook1和Notebook2在不同时间执行),可以将变量序列化为文件存储到Synapse的共享位置(如Workspace的Shared文件夹、ADLS Gen2),再在Notebook2中读取。
用法示例:
Notebook1中保存变量:
import pickle # 定义需要共享的变量 model_params = {"learning_rate": 0.01, "epochs": 50} # 保存到Workspace的Shared文件夹(需确保有读写权限) with open("/dbfs/Workspace/Shared/model_params.pkl", "wb") as f: pickle.dump(model_params, f)
Notebook2中读取变量:
import pickle # 读取序列化的变量 with open("/dbfs/Workspace/Shared/model_params.pkl", "rb") as f: model_params = pickle.load(f) print(f"Loaded params: {model_params}")
方法3:使用环境变量(仅适用于字符串类型)
如果变量是字符串类型,可以将其设置为环境变量,在Notebook2中读取。注意:此方法仅适用于同一Spark池的会话,且变量类型受限。
用法示例:
Notebook1中设置环境变量:
import os # 设置环境变量 os.environ['APP_VERSION'] = "v1.2.0"
Notebook2中读取环境变量:
import os # 获取环境变量 app_version = os.environ.get('APP_VERSION') print(f"App version: {app_version}")
内容的提问来源于stack exchange,提问作者tarik bouchnayf
相关产品推荐
相关产品推荐

