栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Spark中 UDF的使用

Spark中 UDF的使用

Spark提供了多种解决方案来应对复杂挑战, 但是我们面临了很多场景, 原生的函数不足以解决问题。因此,Spark允许我们注册自定义函数(User-Defined Functions, 或者叫 UDFs)。

SparkSQL中可以创建自定义函数UDF对dataframe进行操作,UDF是一对一的关系,用于给dataframe增加一列数据的场景。 每次传入一行数据,该行数据可以是一列,也可以是多列,进行一顿操作后,最终只能输出该新增列的一个值。
Spark支持多种语言,比如Python, Scala, Java, R, SQL. 但是通常数据操作都是用PySpark或者Spark Scala写的。

接下来说一下 udf函数的 两种注册方式:udf() 和 register()

UDF函数有两种注册方式:
- spark.udf.register()  // spark是SparkSession对象  
- udf()  // 需要import org.apache.spark.sql.functions._
//生成spark对象
val spark = SparkSession.builder()
		  .master("local[2]")
		  .appName("testUdf")
		  .config("spark.driver.memory", "1g")
		  .config("spark.executor.memory", "2g")
		  .config("spark.cores.max", "2")
		  .enableHiveSupport()
		  .getOrCreate()

spark.sparkContext.setLogLevel("warn")

// 构造测试数据,有两个字段、名字和年龄
val userData = Array(("A", 16), ("B", 21), ("B", 14), ("B", 18))

import spark.implicits._
//创建测试df
val userDF = spark.createDataframe(userData).toDF("name", "age")

// 注册一张user表
userDF.registerTempTable("user")

注册方式一: 调用sqlContext.udf.register()
此时注册的方法 只能在sql()中可见,对Dataframe API不可见
用法:

    spark.udf.register("strLen", (str: String) => str.length())
    spark.sql("select name,strLen(name) as name_len from user").show()

注册方式二:调用spark.sql.function.udf()方法
此时注册的方法,对外部可见
用法:

import org.apache.spark.sql.functions._
val ageThaner = udf((age:Int,bigger:Int) => age 

 

 

 

 

https://www.cnblogs.com/yyy-blog/p/10280657.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/747543.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号