FlinkSQL Scala版本的自定义UDF —— 03

我们在处理数据的时候经常会出现一些。常用函数无法满足的函数。
本案例的实践效果是:对传入字段变为url。 如
传入:hao123
返回:http://www.hao123.com

源数据csv文件:

hao123,2,1
baidu,2,1

1、自定义UDF/UDAF/UDTF函数的步骤

1)继承函数ScalarFunction
(2)覆写eval方法
(3)注册函数registerFunction
(4)应用

代码:

import org.apache.flink.api.common.typeinfo.TypeInformation
import org.apache.flink.api.scala.ExecutionEnvironment
import org.apache.flink.table.api.{Table, Types}
import org.apache.flink.table.api.scala.BatchTableEnvironment
import org.apache.flink.table.functions.ScalarFunction
import org.apache.flink.table.sinks.CsvTableSink
import org.apache.flink.table.sources.CsvTableSource

object FlinkUDF {

  def main(args: Array[String]): Unit = {
    //有界 bitch 数据table
    val bEnv: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment
    // create a TableEnvironment for batch queries
    val bTableEnv: BatchTableEnvironment = BatchTableEnvironment.create(bEnv)
    //字段和字段类型
    val fieldNames: Array[String] = Array("a", "b", "c")
    val fieldTypes: Array[TypeInformation[_]] = Array(Types.STRING, Types.LONG, Types.LONG)
    // create a TableSource
    val csvSource = new CsvTableSource("F://abc.csv",fieldNames,fieldTypes,",")

    bTableEnv.registerTableSource("test", csvSource)
	//注册函数
    bTableEnv.registerFunction("SimpleUDF",new SimpleUDF(".com"))//.cn
    // Create a Table from a SQL query
    val sql:String = "SELECT SimpleUDF(a) as a,b  FROM test"
    val sqlResult: Table = bTableEnv.sqlQuery(sql)
    // create a TableSink
    val sink = new CsvTableSink("F:/tmp/","|")
    bTableEnv.registerTableSink("SinkTest", Array("x","y"), Array(Types.STRING,Types.LONG), sink)
    //sink table
    sqlResult.insertInto("SinkTest")
    // execute
    bEnv.execute()
  }

  //UDF  拼接字符串  http://xxx.com 或者cn
 class SimpleUDF() extends ScalarFunction {

    private  var address:String =_

    def  this(s: String){
      this()
      address = s
    }
    //重写方法
    def eval(s: String): String = {
      "http://www." + s + address
    }
  }
}

sink文件会输出四个文件:
在这里插入图片描述在这里插入图片描述
这是一个简单的自定义UDF函数,可以根据这个简单的版本举一反三。

感谢你的阅读。如有不对之处,还望指正。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值