scala - 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 _)
解决方案
UDF 需要 aSeq
并且WrappedArray
是 a Seq
,而Array
不是Seq
推荐阅读
- c# - Azure Key Vault 环境变量
- reactjs - 如何获得选定的颜色
- c++ - 如何从 qml 访问 qabstractlistmodel 派生类对象作为另一个类的属性?
- php - 如何根据命令实时强制重定向用户?
- mongodb - 如何更新 mobgo db 中的集合
- android - WebView 仅适用于模拟器,不适用于设备
- android - 当我尝试在棉花糖版本上打开 MAP 时可能出现未处理的承诺拒绝
- powershell - Get-WindowsUpdateLog 流重定向
- ios - 当作为子视图添加到集合视图单元格时,滚动视图中的内容不可见
- python - Python Polyglot:如何防止连字符分隔属于一起的单词