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

时间:2011-10-20 17:36:29

标签: hadoop hive

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

仍然不能完全确定这一点,但我通过使用一个静态延迟值来根据需要加载数据。

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