python - 如何使用python以最有效的方式将大文件上传到elasticsearch?
问题描述
我正在尝试将大约 40gb 的数据上传到 elasticsearch。它是json格式的,因为有很多数据并且计算机无法加载文件,我无法将文件结构提供给elasticsearch,这样它就使用了结构的动态定义。
由于动态定义占用了宝贵的内存,但上传40gb也不是一件容易的事。我让脚本运行了一夜,早上发现它仍在运行(它上传了大约 12 小时以上,但仍然没有上传)。下面显示了如何进行上传。我知道这不是最好的方法,因为它遍历所有行,但我没有想出其他任何方法。
import os
from elasticsearch import Elasticsearch
es = Elasticsearch(
['elasticsearch'],
port=9200
)
raiseFieldLimit = '''
{
"index.mapping.total_fields.limit": 10000
}'''
es.indices.create(index=os.environ.get('INDEX'), body=raiseFieldLimit)
i=0
f = open("test", "r")
for x in f:
string_for_output = x.decode('utf-8').strip()
es.index(index=os.environ.get('INDEX'), doc_type='Data', id=i, body=string_for_output)
i=i+1
所以主要问题是,有没有其他方法可以更快地上传 40gb 文件而不需要等待 12 小时以上?
解决方案
推荐阅读
- ssis - SSIS oracle NUMBER vs sql server映射
- typescript - 用打字稿更漂亮
- c++ - 调用模板函数内的迭代器“指向”的函子
- javascript - jquery 删除和添加类在 AJAX beforeSend 中无法正常工作
- visual-studio - 无法在带有 EF v6.4.4 的 VS2019 v16.11.1 中的数据库第一个 EDMX 文件中添加存储过程
- c# - SQL Server 连接在数百次循环后冻结
- html - 为网页侧边栏使用 side 标签?
- mailchimp - 如何使用带有 MAILCHIMP API 3.0 的 PHP 添加订阅者并向添加的订阅者发送邮件
- r - 如果部分匹配,则从另一个数据框中分配值:`join` 与实习字符串匹配
- c# - eBay Marketplace 帐户删除端点验证失败