Будет ли s3 создавать объекты сам при сохранении файла? - PullRequest
0 голосов
/ 29 августа 2018

Я создал фрейм данных и выбрал несколько столбцов, скажем, col1col2 и col3, используя df.select (). df1=df.select(col1,col2,col3)

Я записываю это в файл паркета и сохраняю его в s3.

df1.write.partitionBy("col1").format("parquet").save('s3a://myBucket/fol1/subfolder')

В настоящее время в моем s3 нет места, подобного 's3a: // myBucket / fol1 / subfolder'. Единственное, что у меня есть, это 's3a: myBucket'. Мой вопрос, так как нет объектов с именами fol1 и subfolder. Будет ли он сам создавать объекты и сохранять файл? или код не получится?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Хотя S3 является хранилищем объектов, Spark, Hive и другие претендуют на свою файловую систему и используют API файловой системы Hadoop.

Некоторые ранние действия искры спасения ():

  1. вызов FileSystem.exists(dest) и сбой, если там что-то есть (если вы не включили добавление к существующим данным)
  2. звоните FileSystem.mkdir(dest).
  3. установите под каталогом _temporary dir для задания, переименовывая вещи в место, когда задание выполнено.

Действие # 2 запускает сканирование для любой записи в пути /a/b/c/dest, являющейся файлом (сбой), создает пустой маркерный объект каталога /a/b/c/dest/. Этот маркер будет удален, как только будет создан дочерний каталог (т. Е. _temporary).

В конце задания не будет никаких родительских записей маркеров, но они идут туда только для того, чтобы сохранить все те фрагменты кода, которые ожидают, что после вызова mkdirs() существует созданный каталог.

Наконец, имейте в виду: весь механизм фиксации по переименованию нарушается, когда дело доходит до S3, так как он (а) медленный и (б) риск потери данных из-за непротиворечивости листинга каталога. Вам необходим согласованный уровень листинга (EMR: Consistent S3, Apache Hadoop: S3Guard, Databricks: что-то также основанное на DynamoDB), и, для максимальной производительности поверх Apache Hadoop 3.1, переключитесь на конкретный коммиттер S3A с нулевым переименованием.

0 голосов
/ 29 августа 2018

Я думаю, вы спрашиваете, создаст ли save('s3a://myBucket/fol1/subfolder') структуру fol1/subfolder в S3, а если нет, нужно ли вам.

Суть в том, что вам не нужно беспокоиться о создании структуры промежуточных папок, поскольку Hadoop FS API создает ее для вас по мере необходимости.

@ Ответ SteveLoughran предоставляет гораздо более подробную информацию и заслуживает того, чтобы быть принятым ответом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...