在编写spark代码时,我使用的是UDF(用户定义函数)。UDF是一个接口,其实现方式如下。
package sparkProject;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.api.java.UDF1;
import org.apache.spark.sql.types.DataTypes;
public class UDFfunctions {
public static void registerCountryCodeFunction(SparkSession spark) {
spark.udf().register("registerCountryCodeFunctionUDF", new UDF1<String, Integer>() {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public Integer call(String t1) throws Exception {
if (t1.toString().toUpperCase().startsWith("I")) {
return 01;
}
return 02;
}
}, DataTypes.IntegerType);
}
}
所以UDF1是一个接口,里面有调用方法。当我使用UDF1接口创建一个实例时,JVM会创建一个匿名类,该类实现UDF1接口并实现调用方法。
在SPARK Api中,要使用registerCountryCodeFunctionUDF功能,我需要执行以下操作
UDFfunctions.registerCountryCodeFunction(spark);
ds2_populationGt100k_with_ia_filters_only.withColumn("countryCode", callUDF("registerCountryCodeFunctionUDF",ds2_populationGt100k_with_ia_filters_only.col("countryName")));
我想知道,我如何创建自己的UDF函数,用户可以在哪里注册它,然后在Java中使用它。。。?
简单地说,我如何在Java中创建这样的代码,当我们使用所需的参数调用callUDF时,它调用由Anonymus类编写的功能。。?需要编写什么,以便在调用callUDF时,调用与Anonymous类编写的相同的功能?
我希望我的问题对所有人来说都是清楚的。。!
谢谢
无论一个对象是否是匿名类的实例,都不会改变您使用它和调用它的方法的方式。
您的框架只是将UDF的实例存储在Map中的某个地方,并根据您提供的名称进行索引。Call UDF()
方法只需从Map中获取它并调用它的call()
方法。
下面是一个做同样的事情的完整例子:
// similar to UDF, but not generic to make it easier to understand
interface Callback {
void call(String message);
}
class Registry {
private Map<String, Callback> callbacks = new HashMap<>();
public registerCallback(String name, Callback callback) {
callbacks.put(name, callback;
}
public void invokeCallback(String name, String message) {
Callback cb = map.get(name);
cb.call(message);
}
}
现在,您可以使用实现接口的顶级类、实现接口的匿名类或lambda创建回调实例,将其注册到注册表中,并最终调用它:
Registry registry = new Registry();
registry.registerCallback("hello", new Callback() {
@Override
void call(String message) {
System.out.println("Hello, here's your message: " + message);
}
});
registry.invokeCallback("hello", "first message");
本文向大家介绍Lua 匿名功能,包括了Lua 匿名功能的使用技巧和注意事项,需要的朋友参考一下 示例 创建匿名函数 匿名函数就像常规的Lua函数一样,只是它们没有名称。 如您所见,该函数未分配任何名称,例如print或add。要创建匿名函数,您要做的就是省略名称。这些函数也可以接受参数。 了解语法糖 重要的是要了解以下代码 实际上只是 但是,上述函数不是匿名的,因为该函数直接分配给变量! 函数是一
本文向大家介绍Julia匿名功能,包括了Julia匿名功能的使用技巧和注意事项,需要的朋友参考一下 示例 箭头语法 可以使用->语法创建匿名函数。这对于将函数传递给高阶函数(例如函数)很有用map。下面的函数计算数组中每个数字的平方A。 使用此功能的示例: 多行语法 可以使用function语法创建多行匿名函数。例如,以下示例计算第一个n数字的阶乘,但使用匿名函数代替内置函数factorial。
匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下: 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块化程度更高。 匿名类有两种实现方式: 继承一个类,重写其方法。 实现一个接口(可以是多个),实现其方法。 下面通过代码来说明。 程序的输出结果如下: 从输出结果可以看出,匿名内部类有
注册域名 目前,web3j仅支持ENS域的解析。它不支持注册。有关如何做到这一点的说明,请参阅ENS quickstart。
PHP-X扩展中可以调用Extension::registerClass方法来注册PHP内置类。可以使用PHPX_ME宏实现参数简化,使用方法: Class c = new Class("CppClass"); /** * 注册构造方法 */ c->addMethod("__construct", CppClass_construct, CONSTRUCT); /** * 普通方法 */ c->a
本文向大家介绍Java匿名类,匿名内部类实例分析,包括了Java匿名类,匿名内部类实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java匿名类,匿名内部类。分享给大家供大家参考,具体如下: 内部类 匿名类 首发日期 :2018-03-25 内部类: 在一个类中定义另一个类,这样定义的类称为内部类。【包含内部类的类可以称为内部类的外部类】 如果想要通过一个类来使用另一个类,可以定