私は、RESTエンドポイントからデータを読み込んでS3に書き込まれる前に一時圧縮ファイルにデータを保存するデータエクスポートジョブを持っています。これは、より小さなペイロードのために働いていた:効率的にRESTエンドポイントから読み取り、Pythonで結果を圧縮
import gzip
import urllib2
# Fails when writing too much data at once
def get_data(url, params, fileobj):
request = urllib2.urlopen(url, params)
event_data = request.read()
with gzip.open(fileobj.name, 'wb') as f:
f.write(event_data)
ただし、データサイズが、私は一度にあまりにも多くのデータを書いて示すように思われるエラーました増加として:
File "/usr/lib64/python2.7/gzip.py", line 241, in write self.fileobj.write(self.compress.compress(data)) OverflowError: size does not fit in an int
私が試しを行ごとにRESTエンドポイントから読み取って各行をファイルに書き込むようにコードを変更しましたが、おそらくエンドポイントがそれを処理するようにセットアップされていないため、これは非常に遅いです。
# Incredibly slow
def get_data(url, params, fileobj):
request = urllib2.urlopen(url, params)
with gzip.open(fileobj.name, 'wb') as f:
for line in request:
f.write(line)
これを行うには、より効率的な方法は、最初の例のように、一度にペイロード全体を読んで、その後効率的になりましメモリにあるデータから、ライン・バイ・ラインを読んだことなどによって、ありますか?