Spark SQL - UDF

images

  • UDF是什么
  • UDF怎么用

UDF是什么

UDF(User Define Function),即用户自定义函数。当内置函数不能很好的解决问题时,可以考虑使用用户自定义函数。

UDF怎么用

  • 在SQL语句中使用UDF
  • 直接对列应用UDF
import org.apache.spark.sql.{SparkSession, functions}

object UserDefinedFunction {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .master("local")
      .appName("udf")
      .getOrCreate()

    run1(spark)
    run2(spark)
  }
  
  def run1(spark: SparkSession) {
    import spark.implicits._

    //注册可以在sql中使用的UDF
    spark.udf.register("to_uppercase", (s: String) => s.toUpperCase())

    var df1 = Seq((1, "car"), (2, "bus")).toDF("id", "vehicle").createOrReplaceTempView("tv1")
    //df1.show(df1.count().toInt)
    spark.sql("select id,to_uppercase(vehicle) from tv1").show()
  }

  def run2(spark: SparkSession): Unit = {
    import spark.implicits._

    val ds = Seq((1, "car"), (2, "bus")).toDF("id", "vehicle")

    //直接定义UDF,然后应用到某个列上
    val toUpperCase = functions.udf((s: String) => s.toUpperCase)
    ds.withColumn("vehicle", toUpperCase('vehicle)).show()
  }
}

你可能感兴趣的:(spark,spark)