spark UDF不接受数组 [英] spark UDF don't accept Array

查看:79
本文介绍了spark UDF不接受数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么Spark UDF函数不支持scala数组,而使用WrappedArray UDF可以正常工作?在函数定义中,Array [Date]给出了Classcast异常.一旦更改为WrappedArray,它的效果就很好.

Why do Spark UDF functions not support scala arrays, whereas with WrappedArray UDF works fine ? Here in function definition Array[Date] gives Classcast exception. Once changed to WrappedArray its works fine.

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 _)

推荐答案

UDF需要 Seq ,而 WrappedArray Seq ,而 Array 不是 Seq

UDFs need a Seq and WrappedArray is a Seq, while Array is not Seq

这篇关于spark UDF不接受数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆