java,如何在spark 1.4.1中调用UDF

时间:2016-11-28 13:48:25

标签: java apache-spark user-defined-functions spark-dataframe

在spark 1.4.1中,callUdf方法的参数是

(String udfName, scala.collection.Seq<Column> cols)

没有可以直接对列进行操作的方法,如1.5.1中的方法

callUDF(String udfName, Column col)

那么如何在1.4.1中调用UDF?或者如何将列类型更改为

scala.collection.Seq<Column>

例如,这些代码适用于1.6.1

sqlContext.udf().register("stringToLong", new UDF1<String, Long>() {

    @Override
    public Long call(String arg0) throws Exception {
        // TODO Auto-generated method stub
        IPTypeConvert itc = new IPTypeConvert();
        return itc.stringtoLong(arg0);
    }
}, DataTypes.LongType);
DataFrame interDF = initInterDF.withColumn("interIPInt", callUDF("stringToLong", initInterDF.col("interIP")));

我应该如何更改代码,以便它们可以在spark 1.4.1中工作?

1 个答案:

答案 0 :(得分:1)

您可以将列表转换为Seq [Column]:

import scala.collection.JavaConversions;
import scala.collection.Seq;

import static java.util.Arrays.asList;

DataFrame interDF = initInterDF.withColumn("interIPInt", 
    callUDF("stringToLong", JavaConversions.asScalaBuffer(asList(initInterDF.col("interIP")))));   

this问题

中查看详情