Hadoop 配置单元设置()-类似于映射器设置()的功能?
我想用Hive替换Hadoop作业。我的挑战是在Hadoop中,我使用setup()通过从分布式缓存中读取引用数据(兴趣点)来构建kdtree。然后,我使用map()中的kdtree来计算目标数据相对于kdtree的距离Hadoop 配置单元设置()-类似于映射器设置()的功能?,hadoop,hive,Hadoop,Hive,我想用Hive替换Hadoop作业。我的挑战是在Hadoop中,我使用setup()通过从分布式缓存中读取引用数据(兴趣点)来构建kdtree。然后,我使用map()中的kdtree来计算目标数据相对于kdtree的距离 在Hive中,我想使用udf with evaluate()方法来确定距离,但我不知道如何使用引用数据设置kdtree。这可能吗?我可能没有完整的答案,所以我想提出一些可能有用的想法 您可以使用添加文件… Hive11+(我认为)应该允许您访问GenericUDF.initi
在Hive中,我想使用udf with evaluate()方法来确定距离,但我不知道如何使用引用数据设置kdtree。这可能吗?我可能没有完整的答案,所以我想提出一些可能有用的想法
- 您可以使用
添加文件…
- Hive11+(我认为)应该允许您访问
GenericUDF.initialize中的分布式缓存
- 其中提到
因此,在初始化UDF时,可以通过访问添加到分布式缓存中的文件来构建kdtree 就像爬山说的那样,
addfile
命令将文件添加到分布式缓存中。
只需打开当前目录中的文件,即可访问UDF中的分布式缓存。
即<代码>打开(新文件(System.getProperty(“user.dir”)+“/myfile”)代码>
您可以使用ConstantObjectInspector在GenericUDF
的initialize
方法中访问文件名,在该方法中,您可以打开文件并将其读入内存到数据结构中
Brickhouse的distributed_map
UDF做了类似的事情()
差不多
public ObjectInspector initialize(ObjectInspector[] inspArr) {
ConstantObjectInspector fileNameInsp = (ConstantObjectInspector)inspArr[0];
String fileName = fileNameInsp.getWritableConstantValue().toString();
FileInputStream inFile = new FileInputStream("./" + fileName);
doStuff( inFile );
.....
}