Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 配置单元UDTF不接受超过2列的输出_Hadoop_Hive_Udf - Fatal编程技术网

Hadoop 配置单元UDTF不接受超过2列的输出

Hadoop 配置单元UDTF不接受超过2列的输出,hadoop,hive,udf,Hadoop,Hive,Udf,我编码的配置单元UDTF工作正常,只要指定的输出列数为两列。但现在,我把它改为3并重新部署,它显示以下错误消息 失败:SemanticException[错误10083]:AS子句中提供的别名数与UDTF输出的列数不匹配,预期为2个别名,但实际为3个 有什么原因吗 这是我在初始化方法中使用的代码块 List<String> fieldNames = new ArrayList<String>(3); List<ObjectInspector> fieldOIs

我编码的配置单元UDTF工作正常,只要指定的输出列数为两列。但现在,我把它改为3并重新部署,它显示以下错误消息

失败:SemanticException[错误10083]:AS子句中提供的别名数与UDTF输出的列数不匹配,预期为2个别名,但实际为3个

有什么原因吗

这是我在初始化方法中使用的代码块

List<String> fieldNames = new ArrayList<String>(3);
List<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>(3);
fieldNames.add("word");
fieldNames.add("cnt");
fieldNames.add("ext");

fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
fieldOIs.add(PrimitiveObjectInspectorFactory.javaIntObjectInspector);
fieldOIs.add(PrimitiveObjectInspectorFactory.javaIntObjectInspector);

return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs);

感谢您的帮助。

解决方案是关闭当前配置单元CLI会话,打开另一个配置单元会话并部署jar,以便initialize()中的新更改生效

为使更改在中生效

initialize()方法-->重新启动新的配置单元CLI会话并重新部署jar

process()方法-->在同一会话中重新部署jar有效

似乎每个会话只在第一次部署jar时加载initialize()方法,而每次在同一会话中重新部署jar时都会重新加载process()方法

由于initialize()方法中提供了有关列数的信息,因此在同一会话中任何数量的重新部署都不起作用。在部署jar文件之前,当我关闭会话并启动一个新会话时,它就起作用了

forward(new Object[] { "abcdef", Integer.valueOf(123), Integer.valueOf(123)});