spark3.0教程-SparkSQL:UDF自定义函数

说明

UDF,User-Defined Functions,用户定义的hive函数。

spark自带的函数并不能完全满足业务需求,这时就需要我们自定义函数了

UDF 特点:one to one,进来一个出去一个,是row级别操作,如:upper、substr函数

案例

根据 id分组对 ele_num 列求和,如果和大于 650 ,显示 过冲;等于 650 显示 充满;小于 650 显示 未充满

代码

package udf

import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}

object Std1 {
  def main(args: Array[String]): Unit = {
    val sc = new SparkConf().setMaster("local[*]").setAppName("std")
    val spark = SparkSession.builder().config(sc).getOrCreate()

    val df: DataFrame = spark.read
      .option("header", "false") //默认为false,表示第一行不是表头
      .option("sep", ",") //列分隔符
      .csv("cdz.txt") //读取文件
      .toDF("id","ele_num","time","start_time","end_time")

    df.printSchema()
    //创建临时视图(只能查询不能修改)
    df.createOrReplaceTempView("cdz")
    // 自定义函数,data 传入数据
    spark.udf.register("warn",(data:Double) =>{
      var ret:String = ""
      if(data>650){
        ret = "过冲"
      }else if(data == 650){
        ret = "充满"
      }else{
        ret = "未充满"
      }
      ret // 返回数据
    })

    val res: DataFrame = spark.sql("select id,sum(ele_num) as sum,warn(sum(ele_num)) as `状态` from cdz group by id")
    res.show()
    spark.close()
  }
}

原文出处:/show_1IX4K8Vpxnd0.html