ile sıkıştırın Bir REST son noktasından veri okuyan ve sonra verileri S3'e yazılmadan önce geçici olarak sıkıştırılmış bir dosyaya kaydeden bir veri dışa aktarma işim var. Bu daha küçük yükleri için çalışıyordu:REST son noktasından etkin bir şekilde okuyun ve sonucu 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)
Ancak, veri boyutu ben bir kerede çok fazla veri yazıyorum göstermek için görünen bir hata var arttıkça:
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
Denedim REST son noktadan satır-by-satır okumak için kod değiştirme ve her satırı dosyaya yazmak, ancak bu son nokta, bunu işlemek için kurulum olmadığından, inanılmaz derecede yavaştı.
# 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)
yapmak için daha verimli bir şekilde, birinci örnekte olduğu gibi, aynı anda tüm yük okuyarak olarak, var, ancak daha sonra verimli bir şekilde hemen bellekte bulunan veri hattı-satır okuma?