如何在Dagster外部(如Jupyter)加载软件定义资产?
Dagster外部加载资产的实现方式
Dagster支持在Jupyter这类外部环境中加载软件定义资产,虽然没有你设想中Project.load_asset这种直接封装的API,但可以通过内置工具实现相同需求,分两种场景处理:
场景1:读取已物化的资产结果(对应force_refresh=False)
如果new_users资产已经在Dagster中执行过(物化),可以直接从Dagster实例中读取存储的结果:
# Jupyter笔记本中代码 from dagster import DagsterInstance from dagster._core.storage.io_manager import IOManager # 连接本地Dagster实例(默认配置下无需额外参数) instance = DagsterInstance.get() # 获取new_users的最新物化事件 latest_materialization = instance.get_latest_materialization_event("new_users") # 通过IO管理器读取资产数据 io_manager = instance.get_io_manager() new_users_data = io_manager.load_input( context=None, input_def=None, metadata=latest_materialization.asset_materialization.metadata )
场景2:强制重新计算资产(对应force_refresh=True)
如果需要重新执行资产计算并获取结果,可以用materialize函数:
# Jupyter笔记本中代码 from dagster import DagsterInstance, load_assets_from_modules, materialize import your_asset_module # 替换为你定义资产的模块名,比如assets # 加载资产定义 asset_defs = load_assets_from_modules([your_asset_module]) # 连接Dagster实例并执行资产 instance = DagsterInstance.get() execution_result = materialize(asset_defs, instance=instance) # 提取new_users的计算结果 new_users_data = execution_result.output_for_node("new_users")
注意事项
- 确保Jupyter环境能访问到你的Dagster资产模块(可将模块所在目录加入Python路径)
- 如果使用了自定义IO管理器,需要确保在Jupyter环境中能正确初始化该管理器
内容的提问来源于stack exchange,提问作者MYK
相关产品推荐
相关产品推荐

