7

part-r-000[0-9][0-9] という名前の、タブで区切られたフィールドを含むファイルがあります。を使用して表示できますhadoop fs -text part-r-00000が、pig を使用してロードすることはできません。

私が試したこと:

x = load 'part-r-00000';
dump x;
x = load 'part-r-00000' using TextLoader();
dump x;

しかし、それは私にゴミを与えるだけです。pig を使用してファイルを表示するにはどうすればよいですか?

関連する可能性があるのは、私の hdfs が現時点でまだ CDH-2 を使用していることです。さらに、ファイルをローカルにダウンロードして実行file part-r-00000するとpart-r-00000: data、ローカルで解凍する方法がわかりません。

4

2 に答える 2

4

HDFS ドキュメントによるとhadoop fs -text <file>、「zip および TextRecordInputStream」データで使用できるため、データはこれらの形式のいずれかである可能性があります。

ファイルが圧縮されている場合、通常、Hadoop は HDFS に出力するときに拡張子を追加しますが、これがない場合は、ローカルで unzipping/ungzipping/unbzip2ing/etc をテストしてみてください。Pig はこの解凍を自動的に行うようですが、ファイル拡張子 (例: part-r-00000.zip) が必要になる場合があります --詳細.

TextRecordInputStream についてはよくわかりません。Pig のデフォルトのメソッドのように聞こえますが、間違っている可能性があります。簡単な Google を実行したときに、Pig を介してこのデータをロードするという言及は見当たりませんでした。

更新: シーケンス ファイルであることを発見したので、PiggyBank を使用してそれをロードする方法は次のとおりです。

-- using Cloudera directory structure:
REGISTER /usr/lib/pig/contrib/piggybank/java/piggybank.jar
--REGISTER /home/hadoop/lib/pig/piggybank.jar
DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader();


-- Sample job: grab counts of tweets by day
A = LOAD 'mydir/part-r-000{00..99}' # not sure if pig likes the {00..99} syntax, but worth a shot 
    USING SequenceFileLoader AS (key:long, val:long, etc.);
于 2012-09-06T02:20:43.960 に答える
3

シーケンス ファイルを操作 (読み取り/書き込み) したい場合は、Twitter のElephant-BirdPigも試してみてください。

それらの読み書き方法の例をここで見つけることができます。

シーケンス ファイルでカスタム Writables を使用する場合は、AbstractWritableConverterを拡張してカスタム コンバーターを実装できます。

マシンにThriftElephant-Birdをインストールする必要があることに注意してください。ビルドする前に、正しい Thrift バージョンを使用していることを確認し、pom.xmlで Thrift 実行可能ファイルの正しいパスを指定します。

<plugin>
  <groupId>org.apache.thrift.tools</groupId>
  <artifactId>maven-thrift-plugin</artifactId>
  <version>0.1.10</version>
  <configuration>
    <thriftExecutable>/path_to_thrift/thrift</thriftExecutable>
  </configuration>
</plugin>
于 2012-09-06T14:06:24.003 に答える