使用 Google 云存储 API 处理大文件
Handling big files with Google Cloud Storage API
我需要实现的是使用 cloudstorage
库将文件列表连接成一个文件。这需要在内存上限为 512MB 的 mapreduce 分片内发生,但串联文件可能大于 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())
有没有办法解决这个问题?也许以块的形式打开或附加文件?以及如何做到这一点?谢谢!
== 编辑 ==
经过更多测试,内存限制似乎只适用于 f.read()
,而写入大文件是可以的。分块读取文件解决了我的问题,但我真的很喜欢 @Ian-Lewis 指出的 compose()
函数。谢谢!
对于大文件,您需要将文件拆分成更小的文件,上传每个文件,然后将它们合并为 composite objects. You will want to use the compose()
function from the library. It seems there is 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。
我需要实现的是使用 cloudstorage
库将文件列表连接成一个文件。这需要在内存上限为 512MB 的 mapreduce 分片内发生,但串联文件可能大于 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())
有没有办法解决这个问题?也许以块的形式打开或附加文件?以及如何做到这一点?谢谢!
== 编辑 ==
经过更多测试,内存限制似乎只适用于 f.read()
,而写入大文件是可以的。分块读取文件解决了我的问题,但我真的很喜欢 @Ian-Lewis 指出的 compose()
函数。谢谢!
对于大文件,您需要将文件拆分成更小的文件,上传每个文件,然后将它们合并为 composite objects. You will want to use the compose()
function from the library. It seems there is 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。