spark自定义项不接受数组

iibxawm4  于 2021-05-24  发布在  Spark
关注(0)|答案(1)|浏览(432)

为什么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 _)
o7jaxewo

o7jaxewo1#

自定义项需要 Seq 以及 WrappedArray 是一个 Seq ,而 Array 不是 Seq

相关问题