首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不接受超过2列输出的单元UDTF

不接受超过2列输出的单元UDTF
EN

Stack Overflow用户
提问于 2015-07-20 01:34:02
回答 1查看 730关注 0票数 0

该单元UDTF I编码,工作良好,因为指定的输出列数是两个。但是现在,我将它更改为3并重新部署,它显示了以下错误消息。

失败: SemanticException错误10083:在AS子句中提供的别名数与UDTF预期的两个别名输出的列数不匹配,但得到了3个

有什么理由吗?

下面是我在初始化方法中使用的代码块。

代码语言:javascript
复制
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方法中的前向语句

代码语言:javascript
复制
forward(new Object[] { "abcdef", Integer.valueOf(123), Integer.valueOf(123)});

任何帮助都很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-20 19:26:35

解决方案是关闭当前的hive会话,打开另一个单元会话并部署jar,以使初始化()中的新更改生效。

若要使更改生效,

初始化()方法->重新启动一个新的hive会话并重新部署jar

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

看起来,初始化()方法仅在jar的第一次部署期间才加载,而每当jar在同一个会话内重新部署时,process()方法才会重新加载。

由于初始化()方法中存在关于列数的信息,因此它无法在同一会话中进行任何数量的重新部署。当我关闭会话并在部署jar文件之前启动一个新会话时,它起了作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31507739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档