gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:33:55 26 4
gpt4 key购买 nike

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

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));

关于java - 如何通过 Java 在 Apache Spark 中注册不带参数的 UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41956242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com