【问题标题】:Speed-up Generator -> List -> CSV in PythonPython 中的加速生成器 -> 列表 -> CSV
【发布时间】:2023-04-07 02:16:02
【问题描述】:

我需要优化写入从 Elastic Search 中提取的 CSV 文件数据的过程,其中 elasticsearch.helpers.scan 使用 json/dict 数据构建生成器函数。

results = elasticsearch.helpers.scan(es, query=body, index=index)
with io.open(csv_file_name, "w", encoding="utf-8", newline="") as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=column_names, delimiter=';')
    writer.writeheader()
    writer.writerows([document['_source'] for document in results])

我计时了,发现罪魁祸首是:
"[document['_source'] for document in results]"

需要很长时间才能通过生成器将其解压缩成列表,以便可以将其写入 CSV。 10k 条记录大约需要 30 秒,这可能需要几个小时,因为在某些情况下,我必须处理数百万条记录(每条记录接近 70 列/特征)。

有没有更有效的方法?我尝试了不同的方法来迭代数据(例如在生成器上使用“For”和“next”),但没有明显更好的结果。

我应该以不同的方式从弹性搜索中提取数据吗? (除了返回生成器函数的扫描助手)

谢谢!

【问题讨论】:

    标签:
    python
    csv
    elasticsearch
    optimization
    generator