scala - 检查 spark 中是否存在嵌套列
问题描述
让我们有以下内容
case class SubRecord(x: Int)
case class ArrayElement(foo: String, bar: Int, vals: Array[Double])
case class Record(
an_array: Array[Int], a_map: Map[String, String],
a_struct: SubRecord, an_array_of_structs: Array[ArrayElement])
val df = sc.parallelize(Seq(
Record(Array(1, 2, 3), Map("foo" -> "bar"), SubRecord(1),
Array(
ArrayElement("foo", 1, Array(1.0, 2.0, 2.0)),
ArrayElement("bar", 2, Array(3.0, 4.0, 5.0)))),
Record(Array(4, 5, 6), Map("foz" -> "baz"), SubRecord(2),
Array(ArrayElement("foz", 3, Array(5.0, 6.0)),
ArrayElement("baz", 4, Array(7.0, 8.0))))
)).toDF
在这里,如果存在列(路径),我们将获得价值,否则我们会获得异常,但在这种情况下,我想获得像“NOT_FOUND”这样的价值,这可能吗?
预期产出
解决方案
我找到了一个更好的解决方案,我们可以用safeCol()代替col()方法
def DataFrameSafeCol(df:DataFrame)(path: String): Column = {
Try(df(path)) match {
case Success(x) => x
case Failure(_) => lit("NOT_FOUND")
}
}
然后我们可以使用如下
val safeCol=DataFrameSafeCol(df)(_) // function currying
df.select(safeCol("column_name")).show
推荐阅读
- postgresql - postgres逻辑复制中可以将多少数据复制到发布者
- r - 如何从 R 中的列表中提取子元素旁边的元素?
- android - 带有空响应正文的 Twitter oauth/request_token 200 代码
- c++ - 将接口对象传递给构造函数c++?
- android - 单击 CheckBox 时更新 RecyclerView 数据
- python - 从另一个 list-python 以特定顺序创建一个列表
- ios - 间谍无法启动。无法选择开发者身份(证书)
- javascript - 在日期选择器中突出显示禁用日
- android - 无法解决:构建 gradle 时出现 transition-1.2.0 错误
- python - 在 python pandas 中创建一个日期向量