2

次の形式のデータバッグを持っています {([ChannelName#{ (bigXML,[])} ])}

  • DataBagは、タプルである1つのアイテムのみで構成されます。
  • タプルは、マップであるアイテムのみで構成されます。
  • マップは、チャネル名と値の間のマップであるタイプです。
  • これは、1つのタプルのみで構成されるDataBagタイプの値です。
  • タプルは2つのアイテムで構成され、1つはcharrarray(非常に大きな文字列)で、もう1つはマップです。

上記のバッグを放出するUDFがあります。

次に、マップの特定のチャネルに対してDataBag内の唯一のタプルを渡すことにより、別のUDFを呼び出す必要があります。

データバッグとタプルがなかったとすると 、バッグ内のタプルを使用してNowを ([ChannelName#{ (bigXML,[])} ]) 使用してデータにアクセスできます。 そうすると (Prepend $ 0)、次のエラーが発生します。 $0.$0#'StdOutChannel'{([ChannelName#{ (bigXML,[])} ])}$0.$0.$0#'StdOutChannel'ERROR 1052: Cannot cast bag with schema bag({bytearray}) to map

データバッグ内のデータにアクセスするにはどうすればよいですか?

4

1 に答える 1

2

この問題を少し分解してみてください。

あなたがあなたのインナーバッグを手に入れたとしましょう:

MYBAG = $0.$0#'StdOutChannel';

まず、あなたILLUSTRATEまたはDUMPこれはできますか?

このバッグで何ができますか?通常FOREACH、内部のタプルの上にあります。

A = FOREACH MYBAG {
    GENERATE $0 AS MyCharArray, $1 AS MyMap
};

ILLUSTRATE A; -- or if this doesn't work
DUMP A;

これをインタラクティブに試してみて、これらのことを試した結果として、質問をもう少し詳細に編集してください。

StackOverflowの編集のヒント:

  • コードの周りにバッククォートを配置します( `ILLUSTRATE`)
  • 各行でコードブロックを4スペースインデントします
于 2011-02-10T08:36:14.860 に答える