искры, читающие недостающие колонки в паркете - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть паркетные файлы, которые мне нужно прочитать со спарк. В некоторых файлах отсутствует несколько столбцов, которые присутствуют в новых файлах.

Поскольку я не знаю, в каких файлах отсутствует столбец, мне нужно прочитать все файлы в спарке. У меня есть список столбцов, которые мне нужно прочитать. Также может быть так, что во всех файлах может отсутствовать столбец. Мне нужно поставить ноль в тех столбцах, которые отсутствуют.

Когда я пытаюсь сделать sqlContext.sql('query') выдает ошибку, говоря, что столбцы отсутствуют

Если я определю схему и сделаю

sqlContext.read.parquet('s3://....').schema(parquet_schema)

Это дает мне ту же ошибку.

Помогите мне здесь

1 Ответ

0 голосов
/ 15 сентября 2018

Вам необходимо использовать стратегию развития схемы паркета для решения этой ситуации.

Как определено в документации по свечам

Пользователи могут начать с простой схемы и постепенно добавлять дополнительные столбцы в схему по мере необходимости. Таким образом, пользователи могут получить несколько файлов Parquet с разными, но взаимно совместимыми схемами. Источник данных Parquet теперь может автоматически обнаруживать этот случай и объединять схемы всех этих файлов.

Все, что вам нужно сделать, это

val mergedDF = spark.read.option("mergeSchema", "true").parquet("'s3://....'")

Это даст вам данные о паркете с полной схемой.

Болевая точка

Если ваша схема несовместима, например, один файл паркета имеет col1 DataType как String, а другой файл паркета имеет col1 DataType как Long.

Тогда схема объединения не удастся.

...