Spark-Scala Попробуйте выбрать заявление - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь включить оператор Try (). GetOrElse () в свой оператор выбора для DataFrame Spark.Проект, над которым я работаю, будет применен к нескольким средам.Однако каждая среда немного отличается с точки зрения именования необработанных данных ТОЛЬКО для одного поля.Я не хочу писать несколько разных функций для обработки каждого поля.Есть ли элегантный способ обработки исключений, как показано ниже, в операторе выбора DataFrame?

val dfFilter = dfRaw
  .select(
   Try($"some.field.nameOption1).getOrElse($"some.field.nameOption2"),
   $"some.field.abc",
   $"some.field.def"
  )

dfFilter.show(33, false)

Тем не менее, я продолжаю получать следующую ошибку, которая имеет смысл, потому что она не существует в этих средах необработанных данных, но я ожидаю, что инструкция getOrElse перехватит это исключение.

org.apache.spark.sql.AnalysisException: No such struct field nameOption1 in...

Есть ли хороший способ обработки исключений в Scala Spark для операторов select?Или мне нужно будет кодировать разные функции для каждого случая?

1 Ответ

0 голосов
/ 12 октября 2018
val selectedColumns = if (dfRaw.columns.contains("some.field.nameOption1")) $"some.field.nameOption2" else $"some.field.nameOption2"

val dfFilter = dfRaw
  .select(selectedColumns, ...)
...