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

Mat*_*one 5 hadoop hive

假设我正在构建一个名为 StaticLookupUDF 的 UDF 类,它必须在构建过程中从本地文件加载一些静态数据。

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

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

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

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

在文档中的任何地方都找不到这个,我将查看代码,但我想我会同时询问这里的聪明人。

Mat*_*one 2

仍然不完全确定这一点,但我通过使用静态惰性值来根据需要加载数据来解决这个问题。

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