首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用处理大文件

用处理大文件
EN

Stack Overflow用户
提问于 2015-07-25 07:12:01
回答 1查看 1.8K关注 0票数 2

我需要实现的是使用cloudstorage库将一个文件列表连接到一个文件中。这需要在mapreduce中进行,它的内存上限为512 to,但是连接文件可能大于512 to。

当文件大小达到内存限制时,以下代码段会中断。

代码语言:javascript
复制
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()函数。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-27 08:29:59

对于大文件,您将希望将文件分解为较小的文件,然后将每个文件上传并合并为复合对象。您将希望使用库中的函数。似乎有上面还没有文档

在你上传完所有的部分后,下面这样的内容应该可以工作。需要确保的一件事是,要组成的路径文件在开头不包含桶名或斜杠。

代码语言:javascript
复制
stat = cloudstorage.compose(
    [
        "path/to/part1",
        "path/to/part2",
        "path/to/part3",
        # ...
    ],
    "/my_bucket/path/to/output"
)

如果可能的话,您也可以使用gsutil工具进行检查。它可以为你做自动拆分、并行上传和合成大型文件

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31623955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档