所以,我们得到了这样的函数:
def ifThenDoubleFuncion = (cond: Boolean, eIf: Double, eElse: Double) => if(cond) eIf else eElse
def ifThenUdf = udf(ifThenDoubleFuncion)
我希望此函数接受Spark DataFrame所提供的所有数据类型,所以我尝试了这个:
def ifThenFuncion[T <: AnyVal](cond: Boolean, eIf: T, eElse: T) => if(cond) eIf else eElse
但它会引发错误,因为DataFrame无法处理AnyVal对象。
由于性能原因,我不想使用模式匹配。我认为有一种优雅的方法可以解决这个问题。
提前致谢!!
答案 0 :(得分:0)
在这里使用AnyVal或泛型是否有特定原因? 如果类型本身不重要,为什么不使用任何类型:
def ifThenDoubleFuncion = (cond: Boolean, eIf: Any, eElse: Any) => if(cond) eIf else eElse
<强> UPD 强>
对不起啊。那里需要TypeTag。所以:def ifThenDoubleFuncion[T: TypeTag](cond: Boolean, eIf: T, eElse: T): T = if(cond) eIf else eElse
udf { ifThenDoubleFuncion }
<: AnyVal
为类型T提供了不必要的限制。