该单元UDTF I编码,工作良好,因为指定的输出列数是两个。但是现在,我将它更改为3并重新部署,它显示了以下错误消息。
失败: SemanticException错误10083:在AS子句中提供的别名数与UDTF预期的两个别名输出的列数不匹配,但得到了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);下面是process方法中的前向语句
forward(new Object[] { "abcdef", Integer.valueOf(123), Integer.valueOf(123)});任何帮助都很感激。
发布于 2015-07-20 19:26:35
解决方案是关闭当前的hive会话,打开另一个单元会话并部署jar,以使初始化()中的新更改生效。
若要使更改生效,
初始化()方法->重新启动一个新的hive会话并重新部署jar
process()方法->在同一会话中重新部署jar !
看起来,初始化()方法仅在jar的第一次部署期间才加载,而每当jar在同一个会话内重新部署时,process()方法才会重新加载。
由于初始化()方法中存在关于列数的信息,因此它无法在同一会话中进行任何数量的重新部署。当我关闭会话并在部署jar文件之前启动一个新会话时,它起了作用。
https://stackoverflow.com/questions/31507739
复制相似问题