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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:35:59