PySpark Записать двоичную колонку паркета со статистикой (подписано-min-max.enabled) - PullRequest
0 голосов
/ 05 ноября 2018

Я нашел этот билет apache-parquet https://issues.apache.org/jira/browse/PARQUET-686, который помечен как разрешенный для parquet-mr 1.8.2. Мне нужна функция, рассчитанная min/max в метаданных паркета для столбца (string или BINARY).

И ссылка на это письмо https://lists.apache.org/thread.html/%3CCANPCBc2UPm+oZFfP9oT8gPKh_v0_BF0jVEuf=Q3d-5=ugxSFbQ@mail.gmail.com%3E который использует scala вместо pyspark в качестве примера:

     Configuration conf = new Configuration();
        + conf.set("parquet.strings.signed-min-max.enabled", "true");
     Path inputPath = new Path(input);
     FileStatus inputFileStatus =
       inputPath.getFileSystem(conf).getFileStatus(inputPath);
     List<Footer> footers = ParquetFileReader.readFooters(conf, inputFileStatus, false);

Мне не удалось установить это значение в pyspark (возможно, я устанавливаю его не в том месте?)


пример кадра данных

import random
import string
from pyspark.sql.types import StringType    

r = []
for x in range(2000):
    r.append(u''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10)))

df = spark.createDataFrame(r, StringType())

Я пробовал несколько разных способов настройки этой опции:

df.write.format("parquet").option("parquet.strings.signed-min-max.enabled", "true").save("s3a://test.bucket/option")
df.write.option("parquet.strings.signed-min-max.enabled", "true").parquet("s3a://test.bucket/option")
df.write.option("parquet.strings.signed-min-max.enabled", True).parquet("s3a://test.bucket/option")

Но во всех сохраненных файлах паркета отсутствуют значения ST / STATS для столбца BINARY. Вот пример вывода метаданных из одного из файлов паркета:

creator:     parquet-mr version 1.8.3 (build aef7230e114214b7cc962a8f3fc5aeed6ce80828)
extra:       org.apache.spark.sql.parquet.row.metadata = {"type":"struct","fields":[{"name":"value","type":"string","nullable":true,"metadata":{}}]}

file schema: spark_schema
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
value:       OPTIONAL BINARY O:UTF8 R:0 D:1

row group 1: RC:33 TS:515
---------------------------------------------------------------------------------------------------

Кроме того, на основе этой цепочки электронных писем 1036 * и вопрос: Укажите свойства паркета pyspark

Я попытался проникнуть в конфигурацию через приватный API pyspark:

spark.sparkContext._jsc.hadoopConfiguration().setBoolean("parquet.strings.signed-min-max.enabled", True)

Так что я все еще не могу установить этот конф parquet.strings.signed-min-max.enabled в parquet-mr (или он установлен, но что-то пошло не так)

  1. Можно ли настроить parquet-mr из pyspark
  2. pyspark 2.3.x поддерживает статистику столбцов BINARY?
  3. Как использовать функцию PARQUET-686 для добавления min/max метаданных для строковых столбцов в файле паркета?

1 Ответ

0 голосов
/ 07 ноября 2018

Поскольку исторически создатели Parquet записывали неверные значения min / max для строк UTF-8, новые реализации Parquet пропускают эту статистику во время чтения, если не установлено значение parquet.strings.signed-min-max.enabled. Таким образом, этот параметр является параметром read , который указывает библиотеке Parquet доверять минимальным / максимальным значениям, несмотря на их известный недостаток. Единственный случай, когда этот параметр можно безопасно включить, это если строки содержат только символы ASCII, потому что соответствующие байты для них никогда не будут отрицательными.

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

Правильное решение этой проблемы - PARQUET-1025 , в котором вводятся новые поля статистики min-value и max-value. Они правильно обрабатывают строки UTF-8.

...