В настоящее время пытаются записать большое количество (7,5 миллионов) файлов json из s3 в несколько файлов паркета (128 МБ) или 3600 записей на файл с помощью EMR. Однако этот процесс либо занимает слишком много времени, либо не выдает правильное количество файлов.
Следующее выполняется на основных узлах EMR 12x c4.8xlarge, r3.2xlarge master node
df = spark.read.json("s3://BUCKET)
После чтения файла в информационный кадр. Попытка написать запись напрямую в s3
df.write.parquet("s3://BUCKET")
однако, это создало 200 000 файлов с только приблизительно 36 записями на файл за 3 часа
Я попытался переделить и объединить
df.coalesce(2000).write.parquet("s3://BUCKET")
df.repartition(2000).write.parquet("s3://BUCKET")
однако это заняло около 10 часов
Ожидаемый результат
- установить количество записей или установить размер файла для файла паркета
- весь процесс должен выполняться менее 3 часов
Пожалуйста, предложите любую конфигурацию EMR или код искры (приветствуются решения Python или Scala), который я должен использовать
Также, если у кого-то есть идеи, почему EMR создает так много задач, с которых можно начать, это также будет полезно