我需要实现的是使用cloudstorage库将一个文件列表连接到一个文件中。这需要在mapreduce中进行,它的内存上限为512 to,但是连接文件可能大于512 to。
当文件大小达到内存限制时,以下代码段会中断。
list_of_files = [...]
with cloudstorage.open(filename...) as file_handler:
for a in list_of_files:
with cloudstorage.open(a) as f:
file_handler.write(f.read())有办法绕过这个问题吗?也许打开或附加文件块?那怎么做呢?谢谢!
==编辑==
经过一些更多的测试后,内存限制似乎只适用于f.read(),而写入大文件是可以的。大块读取文件解决了我的问题,但正如@Ian所指出的那样,我非常喜欢compose()函数。谢谢!
发布于 2015-07-27 08:29:59
对于大文件,您将希望将文件分解为较小的文件,然后将每个文件上传并合并为复合对象。您将希望使用库中的函数。似乎有上面还没有文档。
在你上传完所有的部分后,下面这样的内容应该可以工作。需要确保的一件事是,要组成的路径文件在开头不包含桶名或斜杠。
stat = cloudstorage.compose(
[
"path/to/part1",
"path/to/part2",
"path/to/part3",
# ...
],
"/my_bucket/path/to/output"
)如果可能的话,您也可以使用gsutil工具进行检查。它可以为你做自动拆分、并行上传和合成大型文件。
https://stackoverflow.com/questions/31623955
复制相似问题