2

ディレクトリ構造からファイルをロードするために、カスタム ロード udf を pig で作成したいと考えています。

ディレクトリ構造は電子メールディレクトリのようなものです.maildir と呼ばれるルートディレクトリがあります.この中には個々のメール所有者のサブディレクトリがあります.すべてのメールアカウント所有者ディレクトリの中には,inbox,sent,trash などのいくつかのサブディレクトリがあります.

例: maildir/mailholdername1/inbox/1.txt maildir/mailholdername2/sent/1.txt

すべての mailerholdername サブディレクトリから受信トレイ ファイルのみを読み取りたい。

理解できません:

  1. load udf にパラメータとして渡す必要があるもの
  2. ディレクトリ構造全体をどのように解析し、それぞれの受信トレイ ファイルのみを読み取るか。

1つのファイルを処理し、データ抽出を実行して1つのレコードとしてロードしたい.したがって、10個のファイルがある場合、10個のレコードを持つリレーションを取得します.さらに、これらの受信ボックスファイルに対して何らかの操作を行い、いくつかのデータを抽出したい.

4

1 に答える 1

1

変数の深さを持たない定義済みのフォルダー構造があるため、次のパターンを入力パスとして渡すのと同じくらい簡単だと思います。

A = LOAD 'maildir/*/inbox/1.txt' USING PigStorage('\t') AS (f1,f2,f3)

おそらく、このために独自の UDF を作成する必要はありません。PigLoader は、それらが何らかの区切り形式であると仮定して、それらを処理できるはずです (上記の例では、タブ区切りの 3 つのフィールドを想定しています)。

各受信トレイに複数の txt ファイルがある場合*.txtは、1.txt. 最後に、maildir ルート ディレクトリがユーザーのホーム ディレクトリにない場合は、フォルダーへの絶対パスを使用する必要があります。/data/maildir/*/index/*.txt

于 2012-12-21T12:03:57.897 に答える