查了好多东西,Spark DataFrame对列进行操作,agg不能满足对列的所有元素进行广播。 不像Python中的DataFrame操作那样方便。后来发现我们可以使用UDF来注册自定义的函数,从而像使用min、max函数一样方便操作。
spark版本:2.2.0
大致过程分为:自定义函数,只能有一个参数和一个返回值
用udf注册自定义的函数(注意添加引用哦 import)
使用udf注册的函数(以下参考代码,可以跑的,scala版)
val dataDF = spark.createDataFrame(Seq(
(10, 20, 30),
(9, 16, 42),
(12, 23, 35)
)).toDF("age1", "age2", "age3")
dataDF.show()
import org.apache.spark.sql.functions._
val udf_isAdult=udf(operation _) //注册自定义的函数
val dataDF1= dataDF.select(col("*"),udf_isAdult(col("age1")) as "newAge") //使用
dataDF.show()
dataDF1.show()
}
//自定义的函数,您随意.......
def operation(x:Int):Double={
log(x)/100.0
}