将大型S3文件拆分为每个文件的行(不是每个文件的字节)

2024-09-17 02:11:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个8GB的文件,在S3中有文本行(每行有一个回车符)。此文件为自定义格式,不遵循任何常见格式,如CSV、pipe、JSON。。。 我需要根据行数将该文件拆分为更小的文件,这样每个文件将包含100000行或更少的行 (假设最后一个文件可以有剩余的行,因此可能少于100000行)

  1. 我需要的方法不是基于文件大小(即字节),而是基于行数。文件不能在两行之间拆分一行
  2. 我需要使用Python
  3. 我需要使用服务器较少的AWS服务,如Lambda,Glue。。。我不能像EC2或EMR那样启动实例

到目前为止,我发现了很多帖子,展示了如何按字节大小而不是按行数进行拆分。 另外,我不想逐行读取该文件,因为它太慢,效率不高

有人能告诉我一个起始代码或方法,可以完成分裂这个6 GB的文件,这将 运行速度快,任何时候都不需要超过10 GB的可用内存(RAM)

我正在寻找所有可能的选择,只要满足上述基本要求

非常感谢

迈克尔


Tags: 文件csv方法lambda文本服务器awsjson
1条回答
网友
1楼 · 发布于 2024-09-17 02:11:56

boto3.S3.Client.get_object()方法提供类型为StreamingBody的对象作为响应

StreamingBody.iter_lines()方法文档说明:

Return an iterator to yield lines from the raw stream.

This is achieved by reading chunk of bytes (of size chunk_size) at a time from the raw stream, and then yielding lines from there.

这可能适合您的用例。总的想法是让那个巨大的文件流式传输,并在其内容出现时对其进行处理。如果不以某种方式读取文件,我想不出一种方法来实现这一点

相关问题 更多 >