gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:31:06 26 4
gpt4 key购买 nike

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

失败: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);

这是process方法中的forward语句

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

感谢任何帮助。

最佳答案

解决方案是关闭当前的 Hive CLI session ,打开另一个 Hive session 并部署 jar 以使 initialize() 中的新更改生效。

要使更改生效,

initialize() 方法 --> 重新启动一个新的 hive CLI session 并重新部署 jar

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

似乎 initialize() 方法仅在第一次部署 jar 期间按 session 加载,而每次在同一 session 中重新部署 jar 时都会重新加载 process() 方法。

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

关于hadoop - Hive UDTF 不接受超过 2 列的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31507739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com