Spark如何在Java中通过数据集调用UDF [英] Spark How to call UDF over dataset in java

查看:640
本文介绍了Spark如何在Java中通过数据集调用UDF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

What is exact translation of below scala code snippet in Java?

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

请在缺少的语句Java下方填写,例如

please fill below missing statement java e.g.

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();

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

Note: Register udf then call using selectExpr works for me but I need something similar showed above.

工作示例:

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

推荐答案

在Java中,未经注册就无法调用UDF.请检查使用Java中的UDF,无需注册.以下是您的UDF.

In java calling UDF without registration is not possible. Please check Using UDFs in Java without registration. Below is your UDF.

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

注册UDF,您就可以使用callUDF功能.

Register the UDF and you can use callUDF function.

import static org.apache.spark.sql.functions.callUDF;
import static org.apache.spark.sql.functions.col;

sqlContext.udf().register("toUpper", toUpper, DataTypes.StringType);
peopleDF.select(col("name"),callUDF("toUpper", col("name"))).show();

这篇关于Spark如何在Java中通过数据集调用UDF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆