spark(24)sparksql中自定义函数(★★★★★)

sparksql中自定义函数(★★★★★)

创建文件F:/test/test_udf.txt

hello
Hadoop
DataFrame
spark

自定义UDF函数

代码开发

import org.apache.spark.sql.api.java.UDF1
import org.apache.spark.sql.types.StringType
import org.apache.spark.sql.{DataFrame, SparkSession}

object Demo3 {
  def main(args: Array[String]): Unit = {
    val spark=SparkSession.builder().appName("demo").master("local[2]")getOrCreate()
    val dataDF:DataFrame=spark.read.text("file:///F:/test/test_udf.txt")

    dataDF.createTempView("udfTest")

    //自定义函数方法1:小写--》大写
    spark.udf.register("low2Up",new UDF1[String,String] {
      override def call(t1: String): String = return t1.toUpperCase()
    },StringType)

    //自定义函数方法2:大写--》小写
    spark.udf.register("up2Low",(x:String)=>x.toLowerCase())

    spark.sql("select value from udfTest").show()
    spark.sql("select low2Up(value) from udfTest").show()
    spark.sql("select up2Low(value) from udfTest").show()

    spark.stop()
  }
}

运行结果为:

+-----------------+
|UDF:low2Up(value)|
+-----------------+
|            HELLO|
|           HADOOP|
|        DATAFRAME|
|            SPARK|
+-----------------+

+-----------------+
|UDF:up2Low(value)|
+-----------------+
|            hello|
|           hadoop|
|        dataframe|
|            spark|
+-----------------+

说明:

  1. udf.register()支持的参数如下, (函数名称,函数,返回值类型) ,通过该方法,我们可以自定义函数

image-20200418173539916

  1. 使用UDF1接口可以自定义1个输入参数的函数,UDF2接口可以自定义2个输入参数的函数,UDF3接口可以自定义3个输入参数的函数,依次类推....
  2. new UDF1[String,String]的第一个参数是要定义的函数的输入参数类型,第二个参数是要定义的函数的返回值类型
posted @ 2020-08-25 06:12  Whatever_It_Takes  阅读(203)  评论(0编辑  收藏  举报