Как обрабатывать нулевые значения при записи в паркет из Spark - PullRequest
0 голосов
/ 03 мая 2018

До недавнего времени parquet не поддерживал null значения - сомнительная предпосылка. Фактически, последняя версия наконец добавила эту поддержку:

https://github.com/apache/parquet-format/blob/master/LogicalTypes.md

Однако пройдет еще много времени, прежде чем spark поддержит эту новую функцию parquet - если вообще когда-либо. Вот связанный (closed - will not fix) JIRA:

https://issues.apache.org/jira/browse/SPARK-10943

Так, что люди делают с нулевыми значениями столбцов сегодня при записи dataframe в parquet? Я могу думать только о очень безобразных ужасных хакерских атаках, таких как написание пустых строк и ... ну .. У меня есть нет идей, что делать с числовыми значениями для обозначения null - если не считать определенное значение часового и проверка его кода (что неудобно и подвержено ошибкам).

1 Ответ

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

Вы неверно истолковали SPARK-10943 . Spark поддерживает запись значений null в числовые столбцы.

Проблема в том, что только null не несет никакой информации о типе

scala> spark.sql("SELECT null as comments").printSchema
root
 |-- comments: null (nullable = true)

Согласно комментарию Michael Armbrust все, что вам нужно сделать, это разыграть:

scala> spark.sql("""SELECT CAST(null as DOUBLE) AS comments""").printSchema
root
|-- comments: double (nullable = true)

и результат можно безопасно записать в Паркет.

...