如何在Hive自定义函数中操作本地文件
问题
在Hive自定义函数中需要操作本地文件,例如读取文件的内容,需要如何操作?
回答
默认情况下,可以在UDF中用文件的相对路径来操作文件,如下示例代码:
public String evaluate(String text) { // some logic File file = new File("foo.txt"); // some logic // do return here }
在Hive中使用时,将UDF中用到的文件“foo.txt”上传到HDFS上,如上传到“hdfs://hacluster/tmp/foo.txt”,使用以下语句创建UDF,在UDF中就可以直接操作“foo.txt”文件了:
create function testFunc as 'some.class' using jar 'hdfs://hacluster/somejar.jar', file 'hdfs://hacluster/tmp/foo.txt';
例外情况下,如果“hive.fetch.task.conversion”参数的值为“more”,在UDF中不能再使用相对路径来操作文件,而要使用绝对路径,并且保证所有的HiveServer节点和NodeManager节点上该文件是存在的且omm用户对该文件有相应的权限,才能正常在UDF中操作本地文件。