在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/