apache-spark - 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 语句异常?还是我需要为每种情况编写不同的功能?
解决方案
val selectedColumns = if (dfRaw.columns.contains("some.field.nameOption1")) $"some.field.nameOption2" else $"some.field.nameOption2"
val dfFilter = dfRaw
.select(selectedColumns, ...)
推荐阅读
- python - date - offsets.MonthBegin(1) 如果日期是本月的第一天,则返回上个月
- ruby-on-rails - Rails 5:在范围内使用模型函数
- python - 尝试使用python将输入的UTC时间转换为太平洋时间
- reactjs - 什么在构建期间呈现 Create React App html 模板
- javascript - 由于过滤器导致表达式更改,*ngIf 的渲染延迟 - Angular
- c# - 从服务器执行查询时的记录数不同
- xcode - Xcode 11 - 模拟器不会响应
- xpath - 当我提出稍微复杂的请求时,Google 表格中的 IMPORTXML 返回 N/D
- javascript - 使用 twilio javascript 客户端呼叫号码时捕获接受事件
- bash - 如果服务器在 bash 中不可 ping,如何抛出错误