数千のファイルを入力として取り、Amazon S3 からダウンロードし、各マップ ステップが文字列を返すマップ フェーズで処理する Spark ジョブがあります。.tar.gz
出力をファイルに圧縮し、後で S3 にアップロードしたいと思います。それを行う1つの方法は
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
をジェネレーターとして使用して、すべてをメモリにロードする必要がないようにしますか?