【Spark】用udf和withColumn在dafaframe中创建新列

udf使用

import org.apache.spark.sql.functions.udf

udf接收一个函数(func)作为参数,返回一个UserDefinedFunction。

UserDefinedFunction接收列(Column)作为参数,并返回Column.

func可以接收普通类型参数,并返回普通类型结果。

udf会自动把Column入参转化成对应func的入参,并将func返回的结果转化成Column类型。、

注意由于udf限制。func最多接收10个参数

scala 复制代码
import org.apache.spark.sql.functions._
//一个或多个参数
val UDF0= udf{
	(c1:String,c2:Int,...,)=> 函数体
}

df.withColumn("new",UDF0(col("old1"),col("old2")...))

//整行输入
val UDF1= udf{
	(row: Row) => 处理Row类型的函数体,最好返回常规类型
}

val columns = df.columns

df.withColumn("new",UDF1(struct(columns.map(x=>col(x)): _*))

// 注册到sql中使用
 df.createOrReplaceTempView("tempview")
 spark.udf.register("UDF0", UDF0)
 spark.sql("select *, UDF0(struct(`old1`, `old2`, `...`)) as new from tempview").show(100)

struct函数说明:

scala 复制代码
def struct(colName: String, colNames: String*): Column
// Creates a new struct column that composes multiple input columns.
def struct(cols: Column*): Column
// Creates a new struct column. If the input column is a column in a DataFrame, or a derived column expression that is named (i.e. aliased), its name would be retained as the StructField's name, otherwise, the newly generated StructField's name would be auto generated as col with a suffix index + 1, i.e. col1, col2, col3, ...

参考

create-new-column-with-function-in-spark-dataframe

【官方】udf使用
【官方】udf接口
Spark SQL UDF (User Defined Functions)

相关推荐
小刘快学习6 分钟前
一把钥匙开所有门:企业AI网关的统一身份与权限治理
大数据·人工智能
大模型码小白1 小时前
AI大模型接入SDK:人工智能核心概念与发展史
大数据·运维·人工智能·安全·prompt
电商API_180079052472 小时前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
金立基胶粘3 小时前
如何利用替塑油推动环保发展?
大数据·安全
用户3610588626123 小时前
SparkStreaming 之 Kafka 与 SparkStreaming 参数配置详解
大数据·spark
浔溺3 小时前
al+大数据每日学习笔记31
大数据·笔记·学习
Raas1003 小时前
AI网关和大模型网关区别?MAI Gateway(魔芋企业级AI网关)如何实现AI流量统一治理
大数据·人工智能·gateway·ai网关·mai gateway·企业级产品
DO_Community4 小时前
AMD旗舰GPU仅需4美元每小时,DigitalOcean上线Spot GPU实例
大数据·人工智能·agent·ai编程
有书Show4 小时前
GEO发稿平台哪家好:2026生成式引擎优化新规下的平台评估维度
大数据·人工智能
微财经观圈5 小时前
酒店配送机器人如何选型:普渡和优地从安全到场景的全面对比
大数据·安全·机器人