火花 > = 2.3
Scala风格
udf可以直接调用:
import static org.apache.spark.sql.functions.*;import org.apache.spark.sql.expressions.UserDefinedFunction;UserDefinedFunction mode = udf( (Seq<String> ss) -> ss.headOption(), DataTypes.StringType);df.select(mode.apply(col("vs"))).show();火花 <2.3
即使我们假设您的UDF有用并且不能被简单的
getItem调用替换,它的签名也不正确。数组列是使用Scala
WrappedArray而不是普通Java数组公开的,因此您必须调整签名:
UDF1 mode = new UDF1<Seq<String>, String>() { public String call(final Seq<String> types) throws Exception { return types.headOption(); }};如果已经注册了UDF:
sqlContext.udf().register("mode", mode, DataTypes.StringType);您可以简单地使用
callUDF(这是1.5中引入的新功能)按名称进行调用:
df.select(callUDF("mode", col("vs"))).show();您也可以在中使用它
selectExprs:
df.selectExpr("mode(vs)").show();


