我正在努力创建一个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)
但失败了,我知道我错过了什么。任何帮助将不胜感激。