Hive setup() - 类似于Mapper setup()的功能?

时间:2013-12-12 17:18:25

标签: hadoop hive

我想用Hive替换Hadoop作业。我的挑战是在Hadoop中,我使用setup()通过从分布式缓存中读取参考数据(兴趣点)来构建kdtree。然后我使用map()中的kdtree来评估目标数据与kdtree的距离。

在Hive中,我想使用带有evaluate()方法的udf来确定距离,但我不知道如何使用参考数据设置kdtree。这可能吗?

2 个答案:

答案 0 :(得分:0)

我可能没有完整的答案,所以我只想抛弃一些可能有帮助的想法。

因此,在初始化UDF时,您可以通过访问在分布式缓存中添加的文件来构建kdtree。

答案 1 :(得分:0)

像climbage说ADD FILE命令将文件添加到分布式缓存中。 只需打开当前目录中的文件,即可访问UDF中的分布式缓存。    即... open( new File( System.getProperty("user.dir") + "/myfile") );

您可以使用ConstantObjectInspector访问initialize GenericUDF方法中的文件名,您可以在其中打开文件并将内存读入数据结构中。

Brickhouse的distributed_map UDF做了类似的事情(https://github.com/klout/brickhouse/blob/master/src/main/java/brickhouse/udf/dcache/DistributedMapUDF.java

这样的东西
public ObjectInspector initialize(ObjectInspector[] inspArr) {
   ConstantObjectInspector fileNameInsp = (ConstantObjectInspector)inspArr[0];
   String fileName = fileNameInsp.getWritableConstantValue().toString();
   FileInputStream inFile = new FileInputStream("./" + fileName);
   doStuff( inFile ); 
   .....
}