создание одного файла parquet в задании s3 pyspark

#amazon-s3 #pyspark #parquet

#amazon-s3 #pyspark #parquet

Вопрос:

Я написал программу pyspark , которая считывает данные из cassandra и записывает их в aws s3 . Перед записью в s3 я должен выполнить перераспределение (1) или объединение (1), поскольку это создает один единственный файл, в противном случае в s3 создается несколько файлов parquet. использование перераспределения (1) или объединения (1) имеет проблемы с производительностью, и я чувствую, что создание одного большого раздела не является хорошим вариантом с огромными данными. каковы способы создания одного отдельного файла в s3, но без ущерба для производительности?

Комментарии:

1. если вам нужен только один выходной файл, вы можете использовать coalesce (1), с другой стороны, вы можете использовать перераспределение (n), если вы хотите получить n количество файлов-частей четного размера, в идеале размер вашего выходного файла (файлов) должен составлять от 128 МБ до 1 ГБ в диск для Spark, чтобы эффективно обработать их при следующем чтении.

Ответ №1:

coalesce(1) или repartition(1) поместит все ваши данные в 1 раздел (с шагом перемешивания при использовании repartition compare to coalesce ). В этом случае только 1 работнику придется записывать все ваши данные, что является причиной проблем с производительностью — вы уже поняли это.

Это единственный способ использовать Spark для записи 1 файла на S3. В настоящее время другого способа нет, используя только Spark.

Используя Python (или Scala), вы можете делать некоторые другие вещи. Например, вы записываете все свои файлы с помощью spark без изменения количества разделов, а затем :

  • вы получаете свои файлы с помощью python
  • вы объединяете свои файлы как один
  • вы загружаете этот файл на S3.

Он хорошо работает для CSV, но не так хорошо для файлов непоследовательного типа.