0

私がコーディングしたハイブ UDTF は、指定された出力列の数が 2 であるため、正常に動作します。しかし、すぐに 3 に変更して再デプロイすると、次のエラー メッセージが表示されます。

失敗: SemanticException [エラー 10083]: AS 句で指定されたエイリアスの数が、UDTF によって出力される列の数と一致しません

何か理由はありますか?

これが、初期化メソッドで使用しているコード ブロックです。

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)});

どんな助けでも感謝します。

4

1 に答える 1

2

解決策は、現在のハイブ CLI セッションを閉じ、別のハイブ セッションを開き、initialize() の新しい変更を有効にするために jar をデプロイすることです。

変更を有効にするには、

initialize() メソッド --> 新しい Hive CLI セッションを再起動し、jar を再デプロイします

process() メソッド --> 同じセッション内での jar の再デプロイが機能します!

initialize() メソッドは、jar の最初のデプロイ時にのみセッションごとにロードされるのに対し、同じセッション内で jar が再デプロイされるたびに process() メソッドがリロードされるようです。

列数に関する情報は initialize() メソッドに存在するため、同じセッション内で何度再デプロイしても機能しませんでした。jarファイルをデプロイする前に、セッションを閉じて新しいセッションを開始すると機能しました。

于 2015-07-20T19:26:35.253 に答える