我正在尝试从昂贵的UDF构建一个临时列,我需要在Dataset[Row]
的每一行上运行。目前它看起来像:
val myUDF = udf((values: Array[Byte], schema: String) => {
val list = new MyDecoder(schema).decode(values)
val myMap = list.map(
(value: SomeStruct) => (value.field1, value.field2)
).toMap
val field3 = list.head.field3
return (myMap, field3)
})
val decoded = myDF.withColumn("decoded_tmp", myUDF(col("data"), lit(schema))
.withColumn("myMap", col("decoded_tmp._1"))
.withColumn("field3", col("decoded_tmp._2"))
.drop("decoded_tmp")
但是,当我尝试编译它时,我得到一个类型不匹配错误:
类型不匹配; 找到:(scala.collection.immutable.Map [String,Double],String) 必需:org.apache.spark.sql.Dataset [org.apache.spark.sql.Row]
我如何解决这个问题,或者我必须拥有2个昂贵的UDF函数,一个用于生成myMap
而另一个用于生成field3
列?