Dagster教程报错NameError:未定义topstory_ids,如何解决?
解决Dagster中
topstory_ids未定义的问题 你遇到的NameError是因为在@asset(deps=[topstory_ids])里引用的topstory_ids没有被定义为Dagster资产。按照教程逻辑,topstory_ids应该是一个独立的资产函数,负责生成所需的ID文件,具体解决步骤如下:
1. 新增topstory_ids资产函数
在你的代码中添加一个专门获取并保存top story ID的资产,它会先于topstories执行,确保data/topstory_ids.json文件存在:
import json import os import pandas as pd import requests from dagster import asset @asset def topstory_ids() -> None: # 从Hacker News API获取前100条top story ID(数量可自行调整) topstory_ids = requests.get( "https://hacker-news.firebaseio.com/v0/topstories.json" ).json()[:100] # 自动创建data目录(如果不存在) os.makedirs("data", exist_ok=True) # 将ID写入JSON文件 with open("data/topstory_ids.json", "w") as f: json.dump(topstory_ids, f) @asset(deps=[topstory_ids]) def topstories() -> None: with open("data/topstory_ids.json", "r") as f: topstory_ids = json.load(f) results = [] for item_id in topstory_ids: item = requests.get( f"https://hacker-news.firebaseio.com/v0/item/{item_id}.json" ).json() results.append(item) if len(results) % 20 == 0: print(f"Got {len(results)} items so far.") df = pd.DataFrame(results) df.to_csv("data/topstories.csv")
2. 关键说明
topstory_ids作为独立资产,承担了数据获取和持久化的职责,是topstories资产的上游依赖。- Dagster会根据
deps配置自动执行顺序:先运行topstory_ids生成文件,再运行topstories读取文件处理数据,避免文件不存在或变量未定义的问题。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

