【发布时间】:2019-02-01 20:29:10
【问题描述】:
我的底层函数是这样定义的:
def rowToSHA1(s: Seq[Any]): String = {
//return sha1 of sequence
}
}
这是我的udf的定义:
val toSha = udf[String, Seq[Any]](rowToSHA1)
df.withColumn("shavalue",(toSha(array($"id",$"name",$"description",$"accepted")))
当我只传递一个字符串列表作为参数时它可以工作,但是当有一个布尔值时我得到一个错误。
org.apache.spark.sql.AnalysisException: cannot resolve 'array(`id`, `name`,
`description`, `accepted`)' due to data type mismatch: input to function
array should all be the same type, but it's [string, string, string,
boolean];;
我正在探索使用泛型函数,这是个好主意吗?
FIX:在应用函数之前将我的列转换为字符串
df.withColumn("shavalue",(toSha(array($"id",$"name",$"description",$"accepted".cast("string)))
【问题讨论】:
-
您可以将布尔值作为单独的值传递给 udf 函数
标签: scala apache-spark user-defined-functions