Формат файла паркета на S3: какой фактический файл паркета? - PullRequest
0 голосов
/ 22 мая 2018

Scala 2.12 и Spark 2.2.1 здесь.Я использовал следующий код для записи содержимого DataFrame в S3:

myDF.write.mode(SaveMode.Overwrite)
  .parquet("s3n://com.example.mybucket/mydata.parquet")

Когда я перехожу на com.example.mybucket на S3, я на самом деле вижу каталог , называемый " mydata.parquet", а также файл с именем" mydata.parquet_ $ folder $"!!!Если я захожу в каталог mydata.parquet, я вижу под ним два файла:

  • _SUCCESS
  • part-<big-UUID>.snappy.parquet

В то время как я ожидал увидеть единственный файл с именем mydata.parquet, живущий в корне корзины.

Что-то не такздесь (если так, что?!?) или это ожидается с форматом файла Parquet?Если ожидается, какой файл фактический Паркет мне нужно прочитать из директории

  1. mydata.parquet ?;или
  2. mydata.parquet_$folder$ файл ?;или
  3. mydata.parquet/part-<big-UUID>.snappy.parquet?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

В соответствии с API для сохранения файла parqueat он сохраняется в папке, которую вы предоставляете.Успех - это указание на то, что процесс завершен случайно.

S3 создайте эту папку $, если вы напишите непосредственно фиксацию в s3.Что происходит, так это запись в временные папки и копирование в конечный пункт назначения внутри s3.Причина в том, что нет концепции переименования.

Посмотрите на s3-distcp, а также DirectCommiter на предмет проблем с производительностью.

0 голосов
/ 24 мая 2018
  1. Маркер $ folder $ используется emrfs s3n / amazon для обозначения «пустой директории».игнорировать.
  2. Файл _SUCCESS, как отмечают другие, является 0-байтовым файлом.игнорировать
  3. все остальные файлы .parquet в каталоге являются выходными;число, которое вы в итоге получите, зависит от количества задач, выполняемых на входе

Когда spark использует каталог (дерево) в качестве источника данных, все файлы начинаются с _ или.игнорируются;s3n вычеркнет и эти вещи из $ folder $.Поэтому, если вы используете путь для нового запроса, он только подберет этот файл партера.

0 голосов
/ 22 мая 2018

mydata.parquet/part-<big-UUID>.snappy.parquet - это фактический файл данных о паркете.Однако часто такие инструменты, как Spark, разбивают наборы данных на несколько файлов part и ожидают, что они будут указывать на каталог, содержащий несколько файлов.Файл _SUCCESS представляет собой простой флаг, указывающий, что операция записи завершена.

...