python - python - s3 Boto3 从大文件中每次迭代读取 N 行
问题描述
我正在尝试使用 python 在 N 行中处理来自 s3 的大文件的所有记录。我每次迭代都必须获取 N 行。每行都有一些 json 对象。
以下是我已经尝试过的一些事情:
1) 我尝试了这里提到的解决方案 ,将 csv 从 S3 流式传输到 Python ,但它在读取数据字节时破坏了我的 json 结构。
2)
obj = s3.get_object(Bucket=bucket_name, Key=fname)
data=obj['Body'].read().decode('utf-8').splitlines()
读取 100k 行的大文件需要更多时间。它将返回行列表,我们可以进一步迭代以从数据变量中获取行数。
解决方案
可能smart_open可以解决问题。
pip install smart_open[s3]
安装后...
from smart_open import open
client = boto3.client("s3")
transport_params = {'client': client}
with open('s3://%s/%s' % (bucket_name, fname), 'wb', transport_params=transport_params, encoding='utf-8') as f:
for line in f:
print(json.loads(line))
你也可以使用iter_lines:
obj = s3.get_object(Bucket=bucket_name, Key=fname)
for line in obj['Body'].iter_lines(chunk_size=1024, keepends=False):
print(json.loads(line))
推荐阅读
- c# - 是否可以在 c# (ConsoleApplication) 中制作可点击文本
- java - 同步的多线程 Java 应用程序在每 100 次左右运行中有 1 次以 Livelock 或 Deadlock 结束
- python - 从条目序列/组合框打印值
- python - 无法更改 Anaconda env 默认 python 版本
- mysql - 原始 SQL 到 laravel 查询构建器
- tensorflow - 文本嵌入层后池化层的目的
- reactjs - 使用反应钩子重新渲染问题
- r - 相邻顶点表格 igraph 不能处理传入的关系?
- c# - SqlParameterCollection 只接受非空参数类型对象
- c++ - C++:从文件读取时如何显示最后五个名称/行?