Понимание информации метаданных Parquet File, напечатанной с помощью команды "meta" parquet-tools
Я изучаю внутреннее представление файла Parquet, поэтому я просмотрел страницу Apache Parquet на Github, статью Google Dremel, чтобы понять уровни определения и повторения, и блог Twitter, чтобы узнать больше о файле Parquet.
Чтобы связать мое понимание его представления, полученного в результате чтения, с фактическим представлением файлов Parquet, я использовал parquet-tools
команда с meta
вариант для одного из примеров файла Parquet, и он распечатал детали с 3 основными разделами, заголовком, схемой файла и группами строк. Я понял детали, представленные в первых двух разделах, но я не мог полностью понять все детали, представленные в разделе группы строк.
Ниже приведены вопросы, которые у меня есть.
- Хотел узнать больше о чем
DO
,FPO
,VC
(Похоже, что количество всех строк в текущей группе строк) равно. Расширение того, что он означает, можно найти на странице Github parquet-tools, но я хотел получить более подробную информацию об этом. Я понимаю чтоSZ
а такжеST
является. - Рядом с
ENC
Я вижу список схем кодирования, напримерBIT_PACKED
,PLAIN
,RLE
. Я понимаю, что это означает индивидуально, но я не понимаю, почему все время используются как минимум 3 схемы кодирования. - Рядом с количеством записей
RC
и общий размерTS
группы строк, я вижуOFFSET
. Для первой страницы всегда 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]