Java 代码如何使用 Spark 注册 none 参数 UDF

How Java code register none parameter UDF with Spark

我有一组 API,因此可以定义不同的 UDF 来使用。如:

import scala.Function0;
class UDF0 {
 private String targetField;
 private Function0 function0;
}

import scala.runtime.AbstractFunction0;
udf0.setFunction0(new AbstractFunction0<String>() {
  @Override
  public String apply() {
   return "IA";
  }
 })

class UDF0Parser implement Parser<UDF0> {
 public void parse(UDF0 udf0) {
  String udfName = "udf0";
  getSparkSession().udf().register(udfName, ()-> udf0.getFunction0().apply(), ???);
  Column col = functions.callUDF(udfName);
  getDateSet().withColumn("newCol", col);
 }
}

如何获取 Java 中的 scala String TypeTag(位置 ???,第三个参数)?

我转用scala写UDF0Parser:

class UDF0Parser implement Parser<UDF0> {
 def parse(udf0: UDF0): Unit = {
  val udfName = "udf0"
  getSparkSession.udf.register(udfName, udf0.getFunction0)
  val col = functions.callUDF(udfName)
  getDateSet.withColumn("new", col)
 }
}

但是我遇到了一个运行时错误:

Error:(14, 65) type mismatch;
 found   : Function0
 required: () => ?
    stepContext.getSparkSession.udf.register(udfName, transform.getFunction0);
                                                                ^

()->xxx不就是Function0的一个实例吗?我该怎么办?

感谢任何帮助。

我自己找到了一个解决方案,将整行作为参数传递给 UDF,而不需要为一个或多个列编写 UDF。 参见: