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)
关键改动说明
- 直接遍历
jobs.list()返回的生成器获取每个作业对象,不再尝试用字典索引访问 - 调用
job.as_dict()将Job对象转换为字典格式,确保Spark可以正确解析为DataFrame - 通过迭代器的
next_page_token属性获取下一页的token,实现分页遍历
内容的提问来源于stack exchange,提问作者thotwielder
相关产品推荐
相关产品推荐

