1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Spark SQL自定义函数案例(拼接字符串)

Spark SQL自定义函数案例(拼接字符串)

时间:2021-04-27 10:11:47

相关推荐

Spark SQL自定义函数案例(拼接字符串)

实现一个功能,拼接字符串,传入的第一个参数是分隔符

my_concat_ws(",",f1,f2,f3)

结果f1,f2,f3

spark代码

package cn._51doit.day12import org.apache.spark.sql.functions.exprimport org.apache.spark.sql.{Dataset, SparkSession}/**自定义函数(非聚合函数)* @Auther Zhang* @Date /8/21*/object UDFDemo1 {def main(args: Array[String]): Unit = {val spark = SparkSession.builder().appName(this.getClass.getCanonicalName).master("local[*]").getOrCreate()import spark.implicits._val df = spark.createDataset(List(("山东省", "烟台市", "蓬莱区"), ("辽宁省", "大连市", "开发区"), ("广东省", "深圳市", "福田区"))).toDF("province", "city", "district")df.createTempView("v_location")/* val res = spark.sql("select concat_ws(',',province,city,district) location from v_location")res.show()*/val func = (split: String, province: String, city: String, district: String) => {province+split+city+split+district}spark.udf.register("MY_CONCAT_WS",func)//SQL风格/*val res = spark.sql("select my_concat_ws(',',province,city,district) location from v_location")res.show()*///DSL风格df.select(expr("my_concat_ws(',',province,city,district)") as("location")).show()}}

上述代代码中最关键的一行

spark.udf.register("MY_CONCAT_WS",func)

上面的spark类型是SparkSession,调用它的udf方法,再调用register方法,注册一个自定义函数,传入两个参数,函数名字和函数的逻辑

MY_CONCAT_WS就是函数的名字,func是函数的逻辑(本身就是一个function)

注意:如果是自定义聚合函数,就不能直接传入一个function了,需要继承Aggregator类,然后重写父类的方法。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。