我在接受UserDefinedType的lambda函数创建UDF时遇到了一些麻烦。
如果我们使用(已弃用的)callUDF
函数,一切都按预期工作:
// Works
featured.withColumn("parsed",
functions.callUDF(myFunction, DoubleType, featured("elements")))
// Error
featured.withColumn("parsed",
functions.udf(myFunction).apply((featured("elements"))))
抛出的错误是:
由于数据类型不匹配,“无法解析'UDF(元素)':参数1需要数组类型,但”元素“属于数组类型。”
这看起来像是函数.udf如何使用反射来读取UDT的TypeTag(这里称为determinedelemen
)。关于如何解决这个问题的想法?我宁愿不依赖于弃用的方法。
编辑:featured
是一个数据帧,假设它有一个名为'elements'的列,其中包含Seq [DeterminedElementUDT]类型。 myFunction具有以下签名:
def myFunction: (Seq[DeterminedElement] => Double) = elements => {
0.0 // actual calculation done here
}