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|
+-----------------+
说明:
- udf.register()支持的参数如下, (函数名称,函数,返回值类型) ,通过该方法,我们可以自定义函数
- 使用UDF1接口可以自定义1个输入参数的函数,UDF2接口可以自定义2个输入参数的函数,UDF3接口可以自定义3个输入参数的函数,依次类推....
- new UDF1[String,String]的第一个参数是要定义的函数的输入参数类型,第二个参数是要定义的函数的返回值类型