【发布时间】:2015-03-02 07:21:52
【问题描述】:
我有一个 Spark 作业,它需要数千个文件作为输入并从 Amazon S3 下载它们并在映射阶段处理它们,其中每个映射步骤都返回一个字符串。我想将输出压缩到 .tar.gz 文件,然后将其上传到 S3。一种方法是
outputs = sc.map(filenames).collect()
for output in outputs:
with tempfile.NamedTemporaryFile() as tar_temp:
tar = tarfile.open(tar_temp.name, "w:gz")
for output in outputs:
with tempfile.NamedTemporaryFile() as output_temp:
output_temp.write(output)
tar.add(output_temp.name)
tar.close()
问题是outputs 不适合内存(但它们适合磁盘)。有没有办法在映射阶段将输出保存到主文件系统?或者也许使用循环for output in outputs 作为生成器,这样我就不必将所有内容加载到内存中?
【问题讨论】:
标签: python gzip apache-spark pyspark