报错信息:
org.apache.spark.SparkException: Failed to execute user defined function(anonfun$2: (array<double>) => double)
Caused by: java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to [D
代码:
// 定义了一个 udf 参数是 array
val zeroRate = udf((arr:Array[Double])=>{
arr.count(_ == 0).doubleValue()/arr.length.doubleValue()
})
// 实际 传入的 column 是由 collect_list 收集
df.groupBy("group").agg(
collect_list("rank").alias("rank")
).withColumn("rankZero",zeroRate($"rank")).show()
//root
// |-- domain: string (nullable = true)
// |-- rank: array (nullable = true)
// | |-- element: double (containsNull = true)
修改后的 udf
// 参数由 Array -> Seq
val zeroRate = udf((arr:Seq[Double])=>{
arr.count(_ == 0).doubleValue()/arr.length.doubleValue()
})