java,如何在spark 1.4.1中调用UDF [重复]
Posted
技术标签:
【中文标题】java,如何在spark 1.4.1中调用UDF [重复]【英文标题】:java, how to call UDF in spark 1.4.1 [duplicate] 【发布时间】: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 中工作?
【问题讨论】:
【参考方案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 放松 :) 很高兴我帮助了你 :)以上是关于java,如何在spark 1.4.1中调用UDF [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将复杂的 Java 类对象作为参数传递给 Spark 中的 Scala UDF?
无法使用 callUDF() 调用 UDF - Spark Java