array函数参数 scala_scala – 在Spark SQL中将数组作为UDF参数传递
很可能不是最漂亮的解決方案,但你可以嘗試這樣的事情:
def getCategory(categories: Array[String]) = {
udf((input:String) => categories(input.toInt))
}
df.withColumn("newCategory", getCategory(myArray)(col("myInput")))
您還可以嘗試一系列文字:
val getCategory = udf(
(input:String, categories: Array[String]) => categories(input.toInt))
df.withColumn(
"newCategory", getCategory($"myInput", array(myArray.map(lit(_)): _*)))
在旁注中使用Map而不是Array可能是一個更好的主意:
def mapCategory(categories: Map[String, String], default: String) = {
udf((input:String) => categories.getOrElse(input, default))
}
val myMap = Map[String, String]("1" -> "a", "2" -> "b", "3" -> "c")
df.withColumn("newCategory", mapCategory(myMap, "foo")(col("myInput")))
從Spark 1.5.0開始,您還可以使用數組函數:
import org.apache.spark.sql.functions.array
val colArray = array(myArray map(lit _): _*)
myCategories(lit(colArray), col("myInput"))
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的array函数参数 scala_scala – 在Spark SQL中将数组作为UDF参数传递的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java开发环境的搭建(JDK和Ecli
- 下一篇: 数据库优化 - MYSQL优化