0

私は次のようなタプルを持っています:

(a: (b:int, c:int, d:int, e:int))

UDF を呼び出して、ネストされたタプルの範囲を渡したいと思います。これは、コマンドが次のようになると私が期待するものです。

FOREACH alias GENERATE myUDF(a.(c .. e));

しかし、これは私に次のようなエラーを与えます

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 12, column 133>  mismatched input '(' expecting SEMI_COLON

この操作を実行する適切な方法は何ですか?

ありがとう!ウリ

4

1 に答える 1

1

いくつかのオプションがあります。TOTUPLEタプルが長すぎない場合は、組み込みのUDFを使用して各メンバーを個別にリストするのは、それほど面倒ではないことを願っています。

FOREACH alias GENERATE myUDF(TOTUPLE(a.c, a.d, a.e));

ただし、アプリケーションにとって煩雑になるため、おそらくこの質問をしているでしょう。その場合FLATTEN、タプルを実行してから範囲を実行することから始めることができます。

FOREACH (FOREACH alias GENERATE FLATTEN(a)) GENERATE myUDF(TOTUPLE(a::c .. a::e));

UDFに何を渡すことを期待しているのか正確にはわかりません-小さいタプルですか?または、元のタプルからの要素のコレクションですか?UDFTOTUPLEの機能によっては、上記は不要な場合があります。

于 2013-01-22T20:47:52.980 に答える