Как установить кодировку файла Parquet в Spark

78
7

Документация паркета описывает несколько разных кодировок здесь

Это как-то изменяется внутри файла во время чтения/записи, или я могу установить его? Ничего об этом в документации Spark. Только найденные слайды из выступления Райана Блю из команды Netflix. Он устанавливает конфигурации паркета в sqlContext

sqlContext.setConf("parquet.filter.dictionary.enabled", "true")

Похоже, что речь идет не о простой кодировке словаря в файлах Parquet.

спросил(а) 2021-01-19T20:22:37+03:00 6 месяцев, 1 неделя назад
1
Решение
118

Поэтому я нашел ответ на свой вопрос в блоге по твиттеру.

Паркет имеет автоматическое кодирование словаря, которое активируется при наличии нескольких уникальных значений <10 ^ 5. Вот сообщение, объявляющее Parquet 1.0 с самонастраивающимся словарным кодированием

UPD:

Кодировка словаря может быть включена в конфигурациях SparkSession:

SparkSession.builder
.appName("name")
.config("parquet.enable.dictionary","false") //true

Что касается кодировки по столбцу, есть открытая проблема в качестве улучшения в Parquets Jira, которая была создана 14 июля 17 года. Поскольку кодировка слова является стандартным и работает только для всей таблицы, она отключает Delta Encoding (проблема Jira для этой ошибки), которая единственное подходящее кодирование для данных, таких как временные метки, где почти каждое значение уникально.

UPD2

Как мы можем определить, какая кодировка использовалась для выходного файла?

    Я использовал для этого паркет-инструменты.

    → brew install паркет-инструменты (для mac)
    → паркет-инструменты meta your_parquet_file.snappy.parquet

Вывод:

.column_1: BINARY SNAPPY DO:0 FPO:16637 SZ:2912/8114/3.01 VC:26320 ENC:RLE,PLAIN_DICTIONARY,BIT_PACKED
.column_2: BINARY SNAPPY DO:0 FPO:25526 SZ:119245/711487/1.32 VC:26900 ENC:PLAIN,RLE,BIT_PACKED

Где PLAIN и PLAIN_DICTIONARY - это кодировки, которые использовались для этих столбцов

ответил(а) 2021-01-19T20:22:37+03:00 6 месяцев, 1 неделя назад
-5

Я не уверен, понял ли я весь объем вашего запроса (и в этом случае, пожалуйста, не стесняйтесь уточнять).

Вы можете указать параметры хранения для улья таблицы, используя "CREATE TABLE SRC (ID INT) ИСПОЛЬЗОВАНИЕ улого OPTIONS ( 'паркета' FileFormat)" эталонной

Это должно быть легче следовать и более всеобъемлющим

Чтение/запись файла: val usersDF = spark.read.load("examples/src/main/resources/users.parquet") usersDF.select("name", "favorite_color"). Write.save("namesAndFavColors.parquet" )

Я также предполагаю, что вы уже проверили: - sqlContext.parquetFile("File_to_be_read.parquet") - myDataFrame.saveAsParquetFile("file_to_be_saved.parquet")

ответил(а) 2021-01-19T20:22:37+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема