编程语言
首页 > 编程语言> > python-在App Engine上将大CSV文件写入GCS

python-在App Engine上将大CSV文件写入GCS

作者:互联网

我正在从Google App Engine数据存储区中提取大量数据(使用Python),并且需要将其写入GCS(Google云存储)上的csv文件中.

我通过使用迭代查询获取约1万个实体并推迟任务来完成此任务.
不幸的是,GCS不支持附加到文件,因此,在每次任务运行中,我不得不打开并读取整个文件,将其关闭,然后将内容写入新文件并添加新获取的批处理文件.数据.

我正在使用UnicodeWriter / UnicodeReader处理类似于以下内容的csv文件:
https://docs.python.org/2/library/csv.html#examples

我的问题是,当文件变大时,它往往会占用大量实例内存,有时甚至超过了限制.在这种情况下,是否有任何方法可以减少大量内存使用?

处理大型csv文件的任何示例>在GCS上32MB非常受欢迎.

解决方法:

Google Cloud Storage可以愉快地接受大小不受限制的对象,但是您的问题有所不同,这是首先构造对象.

您可以使用Google Cloud Storage的组合支持来提供帮助.但是,撰写具有局限性.您最多可以合成1024个对象(每个调用32个对象,但是可以合成该对象的结果,也可以合成该对象的结果,依此类推,以此类推,直到已经合成了1024个原始源对象为止)一起).因此,只有在将总大小分成1024个小块并使它们对于您的用例足够小时,组合才起作用.

但是,也许这已经足够了.如果是这样,这里有一些资源:

组合功能的文档:https://cloud.google.com/storage/docs/composite-objects#_Compose

我不确定您是否正在使用App Engine云存储库,但是不幸的是,它不支持撰写.您必须获取更通用的Google API Python客户端,然后调用objects#compose方法,在此处记录:https://cloud.google.com/storage/docs/json_api/v1/objects/compose

这是使用它的相关示例:

composite_object_resource = {
        'contentType': 'text/csv',  # required
        'contentLanguage': 'en',
}
compose_req_body = {
        'sourceObjects': [
                {'name': source_object_name_1},
                {'name': source_object_name_2}],
        'destination': composite_object_resource
}
req = client.objects().compose(
        destinationBucket=bucket_name,
        destinationObject=composite_object_name,
        body=compose_req_body)
resp = req.execute()

标签:google-cloud-storage,google-app-engine,csv,python
来源: https://codeday.me/bug/20191120/2047837.html