【问题标题】:spark UDF don't accept Arrayspark UDF 不接受数组
【发布时间】: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


    【解决方案1】:

    UDF 需要 SeqWrappedArraySeq,而 Array 不是 Seq

    【讨论】:

      猜你喜欢
      • 2016-12-12
      • 2017-06-11
      • 2016-12-24
      • 1970-01-01
      • 2019-02-01
      • 2017-01-22
      • 1970-01-01
      相关资源
      最近更新 更多