2017-02-22 25 views
1

什麼是下面的Scala代碼片段在Java中的準確翻譯?星火如何在Java調用UDF在數據集

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例如

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我,但我需要類似的東西上面顯示來電。

工作實施例:

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

回答

3

在java中調用UDF未經登記是不可能的。請檢查Using UDFs in Java without registration。以下是你的UDF。

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

註冊UDF,你可以使用callUDF功能。

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

感謝它的工作 –