【问题标题】:Increasing the speed of the python iterator提高python迭代器的速度
【发布时间】:2017-12-10 01:17:24
【问题描述】:

我在 python 中实现了一个大型查询作业应用程序并部署在应用程序引擎中,需要一些帮助来提高以下过滤器的效率,该过滤器仅过滤作为输入的用户电子邮件

credentials = GoogleCredentials.get_application_default()
bq_conn= discovery.build('bigquery', 'v2', credentials=credentials)

job_query_dict = []    


###Create the big query client
client =bigquery.Client(project=project_id)


###List the jobs in the client
jobs = client.list_jobs(all_users=True)   # API request
print( [job for job in list(client.list_jobs(all_users=True)) if job.user_email==user_email][0])

如何打印 user_email 输入中给出的用户的作业比这更好?

【问题讨论】:

  • 不确定这是否是复制和粘贴错误,但您在示例中执行了两次list_jobs,这不是必需的。您的列表理解可以写成 [job for job in jobs if ...] 在这里就好了,使用您已有的响应。
  • 这只是一个复制粘贴的东西。感谢您的回答,它有效
  • 实际上,使用 pandas 数据帧更快,而不是获取列表中的作业并逐个处理。
  • 那么为什么不添加您的解决方案作为答案呢?回答你自己的问题并接受你自己的答案是完全可以接受的,尤其是考虑到还没有其他答案。指出问题中代码的性能增益的奖励积分。您也可以删除您的问题,但您已经获得了赞成票,因此最好用您的解决方案来回答,而不是将其保留为未解决。

标签: python iterator gcloud


【解决方案1】:

以 pandas 数据框的形式访问作业数据比从列表访问要快

t=bigquery_service.jobs().list(projectId=project_id,allUsers=True,projection='full',stateFilter=job_state.lower()).execute()
try:
    tab = pd.DataFrame(t['jobs'])    
except:
    return "No jobs"

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 2020-02-05
    • 2021-02-23
    • 2020-08-16
    • 1970-01-01
    • 2012-02-27
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多