gpt4 book ai didi

python - 将 S3 文件拆分为 1000 行的较小文件

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:43 24 4
gpt4 key购买 nike

我在 S3 上有一个大约 3 亿行的文本文件。我希望将此文件拆分为每个 1,000 行的较小文件(最后一个文件包含其余部分),然后我想将其放入 S3 上的另一个文件夹或存储桶中。

到目前为止,我一直在使用 linux 命令在我的本地驱动器上运行它:

split -l 1000 file

它将原始文件拆分为 1,000 行的较小文件。但是,对于这样一个较大的文件,从我的本地驱动器下载然后重新上传到 S3 似乎效率很低。

拆分此 S3 文件的最有效方法是什么,最好使用 Python(在 Lambda 函数中)或使用其他 S3 命令?在我的本地驱动器上运行它会更快吗?

最佳答案

您所做的任何操作都必须下载文件、拆分文件并重新上传。唯一的问题是在哪里,是否涉及本地磁盘。

John Rotenstein 为您提供了一个在 EC2 实例上使用本地磁盘的示例。这有在 AWS 数据中心运行的好处,因此它可以获得高速连接,但有以下限制:(1) 您需要磁盘空间来存储原始文件及其片段,以及 (2) 您需要一个 EC2 实例在哪里可以做到这一点。

一个小的优化是通过使用连字符作为 s3 cp 的目标来避免大文件的本地副本:这会将输出发送到标准输出,然后您可以通过管道它变成 split(这里我还使用连字符告诉 split 从标准输入读取):

aws s3 cp s3://my-bucket/big-file.txt - | split -l 1000 - output.
aws s3 cp output.* s3://dest-bucket/

同样,这需要一个 EC2 实例来运行它,以及输出文件的存储空间。但是,split 有一个标志,可让您为拆分中的每个文件运行一个 shell 命令:

aws s3 cp s3://src-bucket/src-file - | split -b 1000 --filter 'aws s3 cp - s3://dst-bucket/result.$FILE' -

现在您已经解决了本地存储的问题,但剩下的问题是在何处运行它。我的建议是 AWS Batch ,它可以在执行命令所需的时间内启动 EC2 实例。

当然,您可以编写一个 Python 脚本在 Lambda 上执行此操作,这将具有在源文件上传到 S3 时自动触发的好处。我不太熟悉 Python SDK (boto),但看起来 get_object将以 stream of bytes 形式返回原始文件的正文,然后您可以将其作为行进行迭代,将您想要的行数累积到每个输出文件中。

关于python - 将 S3 文件拆分为 1000 行的较小文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56139995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com