我需要实现的是使用cloudstorage
库将文件列表连接成一个文件。这需要在 MapReduce 分片内进行,该分片的内存上限为 512MB,但串联文件可能大于 512MB。
当文件大小达到内存限制时,以下代码段会中断。
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())
有办法解决这个问题吗?也许以 block 的形式打开或 append 文件?以及如何做到这一点?谢谢!
==编辑==
经过更多测试,内存限制似乎仅适用于 f.read()
,而写入大文件是可以的。分块读取文件解决了我的问题,但我真的很喜欢 @Ian-Lewis 指出的 compose() 函数。谢谢!
最佳答案
对于大文件,您需要将文件分成较小的文件,上传每个文件,然后将它们合并在一起,作为 composite objects 。您将需要使用compose()
function从图书馆。好像有no docs on it yet .
上传所有部分后,类似以下内容应该可以工作。需要确保的一件事是要组成的路径文件不包含存储桶名称或开头的斜杠。
stat = cloudstorage.compose(
[
"path/to/part1",
"path/to/part2",
"path/to/part3",
# ...
],
"/my_bucket/path/to/output"
)
如果可能的话,您可能还想使用 gsutil 工具进行检查。它可以做automatic splitting, uploading in parallel, and compositing of large files为你。
关于python - 使用 Google Cloud Storage API 处理大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31623955/