hadoop – hive是否为每条记录实例化一个新的UDF对象?

假设我正在构建一个名为StaticLookupUDF的UDF类,它必须在构造期间从本地文件加载一些静态数据.

在这种情况下,我想确保我不会复制比我需要的更多的工作,因为我不想在每次调用evaluate()方法时重新加载静态数据.

显然,每个映射器都使用它自己的UDF实例,但是为每个处理的记录生成了一个新实例吗?

例如,映射器将处理3行.它是创建单个StaticLookupUDF并调用evaluate()3次,还是为每条记录创建一个新的StaticLookupUDF,并且每个实例只调用一次评估?

如果第二个例子是真的,我应该采用什么替代方式来构建它?

无法在文档中的任何地方找到它,我将查看代码,但我想我会同时向这里的聪明人询问.

最佳答案 仍然不完全确定这一点,但我通过拥有一个静态延迟值来解决它,根据需要加载数据.

这样,每个映射器就有一个静态值实例.因此,如果您正在读取数据集并且您有6个地图任务,那么您将在数据中读取6次.不理想,但比每次记录好一次.

点赞