java,如何在spark 1.4.1中调用UDF

标签 java apache-spark user-defined-functions apache-spark-sql

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

最佳答案

您可以将列表转换为 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问题

关于java,如何在spark 1.4.1中调用UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40845884/

相关文章:

java - 将新字段添加到设备管理页面 (OpenGTS-v2.5.9)

java - 将对象添加到 arrayList

apache-spark - 问题 找不到 s3ablock-0001- 的任何有效本地目录

postgresql - Postgres 交叉表 : function returning record called in context that cannot accept type record

sql - 如何在 SQL Server Management Studio 中测试表值函数?

java - 韩文字符在 JTextField 上显示为空框

java - 如何重写 equals() 方法

java - Spark 上第三方服务的 SSL 证书

scala - 阅读 Parquet 时是否有可能保持列顺序?

java - 遍历 pig 中的数组