3

大きな XML ダンプに豚ラテン語を使用しています。豚ラテン語で xml ノードの値を取得しようとしています。ファイルは次のようなものです

< ユーザー名>Shujaat< /ユーザー名>

入力Shujaatを取得したい。piggybank XMLLoader を試しましたが、xml タグとその値も分離するだけです。コードは

register piggybank.jar;

A = load 'username.xml' using org.apache.pig.piggybank.storage.XMLLoader('username')
as (x: chararray);

B = foreach A generate x;

このコードは、ユーザー名タグと値も提供します。値だけが必要です。それを行う方法はありますか?正規表現は知ったけどあまり知らなかった?ありがとう

4

1 に答える 1

5

あなたが与えた要素の例は、次のように抽出できます。

B = foreach A GENERATE REGEX_EXTRACT(x, '<username>(.*)</username>', 1) 
      AS name:chararray;

次のようなネストされた要素:

  <user>
    <id>456</id>
    <username>Taylor</username>
  </user>

次のようなもので抽出できます:

B = foreach A GENERATE FLATTEN(REGEX_EXTRACT_ALL(x, 
     '<user>\\n\\s*<id>(.*)</id>\\n\\s*<username>(.*)</username>\\n\\s*</user>')) 
     as (id: int, name:chararray);

 (456,Taylor)

すべてのニーズに合った、より洗練された正規表現を定義する必要があります。つまり、空の要素、属性などを処理します。もう 1 つのオプションは、Java ライブラリを使用して XML のコンテンツを解析するカスタムUDFを作成することです。これにより、(過度に) 複雑でエラーが発生しやすい正規表現を作成する必要がなくなります。

于 2012-12-01T19:51:36.890 に答える