Scala SparkSQL创建UDF以在列可以是某个时间结构和某个时间字符串时处理异常

时间:2018-05-23 07:28:54

标签: scala apache-spark apache-spark-sql

我正在努力创建一个udf来提取一些列数据。该列很棘手,因为有时它的字符串,但在许多情况下可以是struct。我只想考虑列结构的时间并为其提取所需的信息。

假设这个例子:

SELECT annoyingCol.data From SomeDf

annoyingCol.data等于字符串OR结构,以避免像这样的错误:need struct type but got string;。我想知道我是否可以创建一个检查列类型的udf,例如:

SELECT
  case when isStruct(annoyingCol.data) then annoyingCol.data.my_data else null end
FROM SomeDf

我试过这个

val isStruct = udf((r: Row) => {
    import org.apache.spark.sql.Row
    import org.apache.spark.sql.types.BooleanType
    import scala.util.Try
    Try(r.getAs[String]("estimation_data_inc_waypoints")).isSuccess
  }
)
spark.udf.register("isStruct", isStruct)

但失败了,我知道我错过了什么。任何帮助将不胜感激。

0 个答案:

没有答案