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

Databricks API批量获取作业转DataFrame报错:generator对象不可下标访问

Databricks分页获取所有作业数据转DataFrame报错解决

我需要从Databricks中获取超过3000个作业的数据并转换为DataFrame,因此使用page_token进行分页遍历,但运行代码时出现TypeError: 'generator' object is not subscriptable错误。

原代码

from databricks.sdk import WorkspaceClient

# Replace 'your-databricks-host' and 'your-databricks-token' with your actual Databricks host and token
w = WorkspaceClient(
    host='some host',
    token='some token'
)

all_jobs = []
page_token = None

while True:
    response = w.jobs.list(expand_tasks=False, page_token=page_token)
    all_jobs.extend(response['value'])
    page_token = response.get('next_page_token')
    if not page_token:
        break

jobs_df = spark.createDataFrame(all_jobs)
display(jobs_df)

错误原因

Databricks SDK的w.jobs.list()返回的是生成器对象,不是字典结构,所以不能用['value']或.get()这种字典的访问方式来获取作业列表和分页token。

修正后的代码

from databricks.sdk import WorkspaceClient

# 替换为你的实际Databricks主机地址和令牌
w = WorkspaceClient(
    host='你的Databricks主机地址',
    token='你的Databricks令牌'
)

all_jobs = []
page_token = None

while True:
    # 调用list方法获取分页的作业迭代器
    jobs_iter = w.jobs.list(expand_tasks=False, page_token=page_token)
    # 遍历迭代器,将每个Job对象转为字典后存入列表
    for job in jobs_iter:
        all_jobs.append(job.as_dict())
    # 获取下一页的token
    page_token = jobs_iter.next_page_token
    # 没有下一页则退出循环
    if not page_token:
        break

# 转换为DataFrame并展示
jobs_df = spark.createDataFrame(all_jobs)
display(jobs_df)

关键改动说明

  1. 直接遍历jobs.list()返回的生成器获取每个作业对象,不再尝试用字典索引访问
  2. 调用job.as_dict()将Job对象转换为字典格式,确保Spark可以正确解析为DataFrame
  3. 通过迭代器的next_page_token属性获取下一页的token,实现分页遍历

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:40:06