为什么spark udf函数不支持scala数组,而wrappedarray udf可以正常工作?这里在函数定义数组[date]中给出了classcast异常。一旦换成wrappedarray,它的工作就很好了。
def getDate(listOfDate:mutable.WrappedArray[Date], packageSD:Date, durationrange:Int):Date = {
var nextdate = packageSD.toLocalDate.plusDays(durationrange)
var billdate:Date = null
var mindays = durationrange
var billingdate = listOfDate.map(rec=>
{
println("list date"+rec)
var recdate = rec
var daysDiff = Math.abs(ChronoUnit.DAYS.between(recdate.toLocalDate,nextdate)).toInt
if(daysDiff<=mindays) {
mindays = daysDiff
billdate = recdate
}
println("prefst"+recdate)
println("nextdate"+nextdate)
println("billdate"+billdate)
println("mindays"+mindays)
}
)
return billdate
}
import org.apache.spark.sql.functions.udf
val udffn = udf(getDate _)
1条答案
按热度按时间o7jaxewo1#
自定义项需要
Seq
以及WrappedArray
是一个Seq
,而Array
不是Seq