1. 程式人生 > >spark自定義udf輸入類型為array報錯

spark自定義udf輸入類型為array報錯

定義 true 輸入 ref sca use oot lec 兩個

定義udf如下

val list2string = udf { (style: Array[String], num: Array[Long]) =>
style.zip(num).map(t => t._1 + ":" + t._2).mkString("<br>")
}

輸入為兩個數組,輸出為string

報錯如下

Caused by: java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to [Ljava.lang.String;

打印輸入字段類型

root

|-- user_no: long (nullable = true)

|-- style_list: array (nullable = true)

| |-- element: string (containsNull = true)

|-- styleNum_list: array (nullable = true)

| |-- element: long (containsNull = true)

解決辦法

更改udf輸入為seq

val list2string = udf { (style: Seq[String], num: Seq[Long]) =>
style.zip(num).map(t => t._1 + ":" + t._2).mkString("<br>")
}

spark自定義udf輸入類型為array報錯