我编码的配置单元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)});
任何帮助表示感谢。
答案 0 :(得分:2)
解决方案是关闭当前的配置单元CLI会话,打开另一个配置单元会话并为initialize()中的新更改部署jar以使其生效。
要使更改生效,
initialize()方法 - &gt;重新启动新的hive CLI会话并重新部署jar
process()方法 - &gt;在同一个会话中重新部署jar工作!
似乎只在第一次部署jar时每个会话加载了initialize()方法,而每次在同一个会话中重新部署jar时都会重新加载process()方法。
由于有关列数的信息存在于initialize()方法中,因此它不适用于同一会话中的任意数量的重新部署。当我关闭会话并在部署jar文件之前启动一个新会话时,它工作正常。