Как сохранить столбцы разделов при чтении в файлах ORC в Spark - PullRequest
0 голосов
/ 12 сентября 2018

При чтении в файле ORC в Spark, если вы укажете столбец раздела в пути, этот столбец не будет включен в набор данных. Например, если у нас есть

val dfWithColumn = spark.read.orc("/some/path") 

val dfWithoutColumn = spark.read.orc("/some/path/region_partition=1")

тогда dfWithColumn будет иметь столбец region_partition, а dfWithoutColumn - нет. Как я могу указать, что я хочу включить все столбцы, даже если они разделены?

Я использую Spark 2.2 на Scala.

EDIT: это повторно используемая программа Spark, которая принимает аргументы из командной строки; Я хочу, чтобы программа работала, даже если пользователь переходит в определенный раздел таблицы вместо всей таблицы. Таким образом, использование Dataset.filter не вариант.

Ответы [ 2 ]

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

Если цель состоит в том, чтобы загрузить один раздел, а не целые данные, то вы можете получить выгоду от ленивой загрузки spark и сделать следующее:

val dfWithColumn = spark.read.orc("/some/path") 
dfWithColumn= dfWithColumn.where($"region_partition" === 1)

При этом вы будете получать данные из папки:

"/ некоторые / путь / region_partition = 1"

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

Но если вы хотите манипулировать набором данных для чтения, чтобы добавить столбец с некоторым значением, я предлагаю использовать метод:

withColumn

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

Вместо добавления ваших разделенных столбцов в путь, добавьте их в качестве фильтров. Измените свой код на -

val dfWithColumn = spark.read.orc("/some/path/").where($"region_partition" === 1)

Это правильно идентифицирует схему и считывает данные только для каталога "region_partition = 1".

...