Spark如何在java中通过数据集调用UDF

Rah*_*rma 3 java scala apache-spark

Java 中以下 Scala 代码片段的确切翻译是什么?

import org.apache.spark.sql.functions.udf 
def upper(s:String) : String ={
    s.toUpperCase
}
val toUpper = udf(upper _)
peopleDS.select(peopleDS(“name”),toUpper(peopledS(“name”))).show
Run Code Online (Sandbox Code Playgroud)

请填写下面缺少的语句java eg

import org.apache.spark.sql.api.java.UDF1;
UDF1 toUpper= new UDF1<String, String>() {
            public String call(final String str) throws Exception {
                return str.toUpperCase();  }};

peopleDS.select(peopleDS.col("name"), /*how to run  toUpper("name"))?????*/.show();
Run Code Online (Sandbox Code Playgroud)

注意:注册 udf 然后使用 selectExpr 调用对我有用,但我需要上面显示的类似内容。

工作示例:

sqlContext.udf().register("toUpper",(String s)->s.toUpperCase(), DataTypes.StringType);
 peopleDF.selectExpr("toUpper(name)","name").show();
Run Code Online (Sandbox Code Playgroud)

aba*_*hel 6

在java中调用UDF而不注册是不可能的。请检查在未注册的情况下在 Java 中使用 UDF。下面是您的 UDF。

private static UDF1 toUpper = new UDF1<String, String>() {
    public String call(final String str) throws Exception {
        return str.toUpperCase();
    }
};
Run Code Online (Sandbox Code Playgroud)

注册UDF就可以使用callUDF函数了。

private static UDF1 toUpper = new UDF1<String, String>() {
    public String call(final String str) throws Exception {
        return str.toUpperCase();
    }
};
Run Code Online (Sandbox Code Playgroud)