首页 > 解决方案 > Spark-Scala Try Select 语句

问题描述

我正在尝试将 Try().getOrElse() 语句合并到 Spark DataFrame 的 select 语句中。我正在进行的项目将应用于多个环境。但是,每个环境在仅一个字段的原始数据命名方面略有不同。我不想编写几个不同的函数来处理每个不同的字段。在 DataFrame select 语句中是否有一种优雅的方式来处理异常,如下所示?

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 语句异常?还是我需要为每种情况编写不同的功能?

标签: apache-sparkapache-spark-sqlapache-spark-2.0

解决方案


val selectedColumns = if (dfRaw.columns.contains("some.field.nameOption1")) $"some.field.nameOption2" else $"some.field.nameOption2"

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

推荐阅读