首页 > 解决方案 > spark UDF 不接受数组

问题描述

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

标签: scalaapache-spark

解决方案


UDF 需要 aSeq并且WrappedArray是 a Seq,而Array不是Seq


推荐阅读