Spark如何在Java中通过数据集调用UDF [英] Spark How to call UDF over dataset in java
本文介绍了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屋!
查看全文