【发布时间】:2020-10-12 14:25:45
【问题描述】:
为什么 Spark UDF 函数不支持 scala 数组,而使用 WrappedArray UDF 可以正常工作? 在函数定义中,Array[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 _)
【问题讨论】:
标签: scala apache-spark