object UdfTest {
def main(args: Array[String]): Unit = {
val session: SparkSession = SparkSession.builder().master("local")
.appName("UdfTest")
.getOrCreate()
import session.implicits._
val df: DataFrame = Seq(("liutian",1),("zhujin",2),("liutian",3)).toDF("name","num")
df.show()
df.createOrReplaceTempView("df")
val stringToInt: String => Int = (name:String) => {name.length}
//脱离sql,直接对列应用UDF
val stringToIntUdf: UserDefinedFunction = functions.udf(stringToInt)
df.withColumn("name",stringToIntUdf('name)).show()
//在sql中使用UDF
session.udf.register("stringToIntUdf",stringToInt)
session.sql("select stringToIntUdf(name) as namelength,num from df").show()
}
}