Я хочу создать файл avro из кадра данных pyspark, и в настоящее время я делаю coalesce
, как показано ниже.
df = df.coalesce(1)
df.write.format('avro').save('file:///mypath')
Но теперь это приводит к проблемам с памятью, поскольку все данные будут загружаться в память перед записью, а размер моих данных постоянно растет с каждым днем. Поэтому я хочу записать данные по каждому разделу, чтобы данные записывались на диск кусками и не вызывали проблем с OOM. Я обнаружил, что toLocalIterator
помогает в достижении этого. Но я не уверен, как его использовать. Я пробовал использовать ниже, и он возвращает все строки
iter = df.toLocalIterator()
for i in iter:
print('writing some data')
# write the data into disk/file
Iter выполняет итерацию по каждой строке, а не по каждому разделу. Как мне это сделать?
repartition
вместоcoalesce
? У меня уже были некоторые проблемы с памятью, которые были решены с помощью перераспределения вместо объединения. - person Steven   schedule 25.08.2020.repartition(n)
выполняет равное разбиение, аcoalsce(n)
выполняет приблизительно одинаковое разбиение, чтобы свести к минимуму перемешивание. Если вы хотите записывать/читать данные по разделам, почему бы вам не сделатьdf.repartition(partitionColumns).write.partitionBy(partitionColumns)...
? Развеavro
не поддерживает разбиение? - person Samir Vyas   schedule 25.08.2020