繁体   English   中英

如何通过 Java 在 Apache Spark 中注册不带参数的 UDF

[英]How register UDF without arguments in Apache Spark by Java

我需要注册不带参数的 udf 函数。 但是Apache Spark没有UDF0接口实现。 我在尝试类似的东西:

UDF1<Object, String> my_func = o -> return "some_generated_string";
sqlContext.udf().register("my_func", my_func, DataTypes.StringType);

但是df.withColumns("newCol", functions.expr("concat(col1, my_funct())")); 返回异常org.apache.spark.sql.UDFRegistration$$anonfun$register$25$$anonfun$apply$1 cannot be cast to scala.Function0

所以df.withColumns("newCol", functions.expr("concat(col1, my_funct(1))")); 工作正常,但这是错误的方式并且闻起来很糟糕。

org.apache.spark.sql中的UDFRegistration有方法register[RT: TypeTag](name: String, func: Function0[RT]): UserDefinedFunction Java 将此方法视为register(String name, Function0<RT> func, TypeTag<RT> evidence$1) 我可以编写scala.Function0实现,但什么是TypeTag evidence$1

我通过下一个技巧解决了这个问题:

UDF1<Object, String> my_func = o -> "some_generated_string";
sqlContext.udf().register("my_func", my_func, DataTypes.StringType);

String expression = "concat(`col1`, my_func())";
expression = expression.replace("my_func()", "my_func(null)");

df.withColumns("newCol", functions.expr(expression));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM