1

多くの CSV ファイルがあり、すべてヘッダー行があります。ファイルはすべて似ています:

name, gender, preference, ....
peter, m, soap, ...
paul, m, gel, ...
mary, f, soap, ...
.
.
.

ただし、列の位置と正確なヘッダー名は少し異なる場合があります。別のファイルは次のようになります。

"the preferences", "the name", "the gender",....
soap, peter, m, ...
gel, paul, m, ...
soap, mary, f, ...
.
.
.

ヘッダーに「 」という単語が含まれる列のみを出力/保存したいname。各ファイルが異なる可能性があるため、この列の位置は事前にわかりません。

したがって、各ファイルの列をヘッダー名に関連付ける必要があります。Pigでこれを行うことはできますか?

2 つのFILTER演算子 (ヘッダー用に 1 つ、データ用に 1 つ) を使用することを考えていますが、このためのデータを 2 回読み取る必要はありませんか?

4

1 に答える 1

0

ストリーミングまたはストレージ関数でこれを行う方がおそらく簡単でしょう。

CSVExcelStorage と SKIP_INPUT_HEADER の実装を参照してください - http://svn.apache.org/repos/asf/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/storage/CSVExcelStorage。ジャワ

ファイルのヘッダーを読み取り、「名前」フィールドの場所を見つけて、ファイル内の他のすべてのレコードのその場所にあるフィールドのみを返すことができます。

ファイルがタスク間で分割されている場合、ヘッダーを含まないファイルの部分で動作するタスクは「名前」フィールドを検出できないため、各分割が単一のファイルであることを確認する必要があります。

于 2013-08-06T08:39:02.293 に答える