Понимание информации метаданных Parquet File, напечатанной с помощью команды "meta" parquet-tools

Я изучаю внутреннее представление файла Parquet, поэтому я просмотрел страницу Apache Parquet на Github, статью Google Dremel, чтобы понять уровни определения и повторения, и блог Twitter, чтобы узнать больше о файле Parquet.

Чтобы связать мое понимание его представления, полученного в результате чтения, с фактическим представлением файлов Parquet, я использовал parquet-tools команда с metaвариант для одного из примеров файла Parquet, и он распечатал детали с 3 основными разделами, заголовком, схемой файла и группами строк. Я понял детали, представленные в первых двух разделах, но я не мог полностью понять все детали, представленные в разделе группы строк.

Ниже приведены вопросы, которые у меня есть.

  1. Хотел узнать больше о чем DO, FPO, VC(Похоже, что количество всех строк в текущей группе строк) равно. Расширение того, что он означает, можно найти на странице Github parquet-tools, но я хотел получить более подробную информацию об этом. Я понимаю чтоSZ а также ST является.
  2. Рядом с ENC Я вижу список схем кодирования, например BIT_PACKED, PLAIN,RLE. Я понимаю, что это означает индивидуально, но я не понимаю, почему все время используются как минимум 3 схемы кодирования.
  3. Рядом с количеством записей RC и общий размер TS группы строк, я вижу OFFSET. Для первой страницы всегда 4. Как рассчитывается?.
  4. Я узнал, что верхний и нижний колонтитулы файла Parquet имеют 4-значный магический код как "PAR1". Имеет ли он какое-то особое значение? или просто какой-то произвольный текст, чтобы решить, является ли файл Parquet или нет (независимо от расширения файла).

К сожалению, я не смог прикрепить фрагмент parquet-tools meta вывод команды из-за ограничений безопасности, но я надеюсь, что это будет не слишком много, чтобы визуализировать, что я имею в виду в каждом из вопросов.

1 ответ

На этой странице лучшее описание, которое я нашел:https://github.com/apache/parquet-mr/tree/master/parquet-tools-deprecated .

Таким образом, кажется, что DO, FPO - это просто информация о смещении, где начинаются значения этих конкретных столбцов. VC = количество существующих ненулевых значений.

Создание паркетного файла с пандами

      import pandas as pd

df = pd.DataFrame({
    'w1': ["John", "Max", "Hans"],
    'w2': ["Doe", "Mustermann", "Peter"],
    'w3': ["New York", "Berlin", "München"],
    'w4': [1990, 1980, 1970]})


df.to_parquet('./test_pandas.lz4.parquet', compression="lz4")

Мета-вывод parquet-tools.jar с java -jar ./parquet-tools-1.10.1.jar meta <file>

      file schema: schema
--------------------------------------------------------------------------------
w1:          OPTIONAL BINARY O:UTF8 R:0 D:1
w2:          OPTIONAL BINARY O:UTF8 R:0 D:1
w3:          OPTIONAL BINARY O:UTF8 R:0 D:1
w4:          OPTIONAL INT64 R:0 D:1

row group 1: RC:3 TS:440 OFFSET:4
--------------------------------------------------------------------------------
w1:           BINARY LZ4 DO:4 FPO:51 SZ:98/79/0.81 VC:3 ENC:PLAIN_DICTIONARY,RLE,PLAIN ST:[min: Hans, max: Max, num_nulls: 0]
w2:           BINARY LZ4 DO:165 FPO:219 SZ:106/87/0.82 VC:3 ENC:PLAIN_DICTIONARY,RLE,PLAIN ST:[min: Doe, max: Peter, num_nulls: 0]
w3:           BINARY LZ4 DO:337 FPO:394 SZ:115/97/0.84 VC:3 ENC:PLAIN_DICTIONARY,RLE,PLAIN ST:[min: Berlin, max: New York, num_nulls: 0]
w4:           INT64 LZ4 DO:524 FPO:565 SZ:121/109/0.90 VC:3 ENC:PLAIN_DICTIONARY,RLE,PLAIN ST:[min: 1970, max: 1990, num_nulls: 0]
Другие вопросы по тегам