Hive UDTF不接受超过2列的输出

时间:2015-07-20 01:34:03

标签: hadoop hive udf

我编码的配置单元UDTF工作正常,因为指定的输出列数是2。但是,此刻,我将其更改为三并重新部署,它会显示以下错误消息。

FAILED: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);

这是流程方法中的前瞻性陈述

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

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

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

要使更改生效,

initialize()方法 - &gt;重新启动新的hive CLI会话并重新部署jar

process()方法 - &gt;在同一个会话中重新部署jar工作!

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

由于有关列数的信息存在于initialize()方法中,因此它不适用于同一会话中的任意数量的重新部署。当我关闭会话并在部署jar文件之前启动一个新会话时,它工作正常。