【问题标题】:java, how to call UDF in spark 1.4.1 [duplicate]java,如何在spark 1.4.1中调用UDF [重复]
【发布时间】:2016-11-28 13:48:24
【问题描述】:

在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 中工作?

【问题讨论】:

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


    【解决方案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问题中查看更多信息

    【讨论】:

    • 原谅我,我是菜鸟。非常感谢!
    • @volity 放松 :) 很高兴我帮助了你 :)
    猜你喜欢
    • 2016-05-22
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2017-04-30
    • 2018-11-29
    相关资源
    最近更新 更多