Я читаю большой zip-файл через pyspark, читаю его порциями и обрабатываю содержимое порциями. Постобработка содержимого при использовании основной памяти не снижается.
spark = SparkSession.builder().getOrCreate()
buffer = io.BytesIO(<zip file from s3>)
z = zipfile.ZipFile(buffer)
with z.open(z.infolist()[0]) as f:
line_counter=0
for line in f:
# Append file contents to list
data.append(line)
line_counter=line_counter+1
# Reset counters if record count hit max-data-length threshold
# Create spark dataframes
if not line_counter % 100000:
main(spark, data)
Initial memory usage on master:
total used free shared buffers cached
Mem: 127802 20115 107687 0 118 10424
-/+ buffers/cache: 9571 118230
Swap: 0 0 0
Memory usage after few runs:
# free -m
total used free shared buffers cached
Mem: 127802 65449 62353 0 119 10491
-/+ buffers/cache: 54838 72963
Swap: 0 0 0
#
total used free shared buffers cached
Mem: 127802 92898 34904 0 119 10501
-/+ buffers/cache: 82276 45526
Swap: 0 0 0
Я ожидаю, что использование памяти будет исходным, после одного цикла обработки, но этого не происходит, из-за чего после некоторого итерационного кластера возникает исключение памяти.