2016-04-12 4 views
0

アマゾンEMR-4.5、Hadoopの2.7.2、豚0.14プロジェクト '-tagFile' オプションを使用して、ファイル名フィールド、LOAD、豚0.14

私は、ファイル名フィールドを投写したい

と-tagFileオプションを使用してロードした後、選択されたフィールドを新しいリレーションに変換します。結果は意味をなさないと思われる。例:

タグファイル-test.txtの(タブ区切り)

AAA 123 2016 
BBB 456 2016 
CCC 789 2016 

test = LOAD 'tagfile-test.txt' USING PigStorage('\t','-tagFile') AS (f0, f1, f2, f3); 
DUMP test; 

(tagfile-test.txt,AAA,123,2016) 
(tagfile-test.txt,BBB,456,2016) 
(tagfile-test.txt,CCC,789,2016) 

が正しいロードダンプ - F0、F1、F2

test = LOAD 'tagfile-test.txt' USING PigStorage('\t','-tagFile') AS (f0, f1, f2, f3); 
project = FOREACH test GENERATE f0, f1, f2; 
DUMP project; 

(tagfile-test.txt,AAA,123) 
(tagfile-test.txt,BBB,456) 
(tagfile-test.txt,CCC,789) 

が間違っを生成します - 生成f0、f1、f3(上記と同じ結果)

test = LOAD 'tagfile-test.txt' USING PigStorage('\t','-tagFile') AS (f0, f1, f2, f3); 
project = FOREACH test GENERATE f0, f1, f3; 
DUMP project; 

(tagfile-test.txt,AAA,123) 
(tagfile-test.txt,BBB,456) 
(tagfile-test.txt,CCC,789) 

正しくない - 豚が正しくフィールド名を特定されていないようだF0、F2、F3(確認)

test = LOAD 'tagfile-test.txt' USING PigStorage('\t','-tagFile') AS (f0, f1, f2, f3); 
project = FOREACH test GENERATE f0, f2, f3; 
DUMP project; 

(tagfile-test.txt,AAA,2016) 
(tagfile-test.txt,BBB,2016) 
(tagfile-test.txt,CCC,2016) 

を生成します。私はフィールドの位置($ 0、$ 1、$ 2、$ 3)を同じ結果で使用しようとしました。

答えて

0

フィールドは '、'で区切られているようですが、PigStorageの区切り文字として '\ t'を使用しています。フィールドのデータ型も指定してください。

test = LOAD 'tagfile-test.txt' USING PigStorage(',','-tagFile') AS (f0:chararray, f1:chararray, f2:int, f3:int); 
+0

謝罪、で説明されています。私は質問の入力ファイルを明確にするために書式を変更しました。私は、同じ問題をデータ型を追加しようとしました。データ型が正しくないため、これらのデータ型では空白(最後の例ではf2の場合)が返されます。 – chillvibes

0

するために、この

test = LOAD 'tagfile-test.txt' USING PigStorage('\t','-tagFile') AS (f0, f1, f2, f3); 

を変更してみてください私はpigstorageでタグファイルオプションを使用したときと同じ問題に直面し、豚のスクリプトで線の下に追加することで問題を解決:

セットpig.optimizer.rules.disabled 'ColumnMapKeyPrune';

ColumnMapKeyPruneはよくファイルがタブ区切り事実であるhttp://chimera.labs.oreilly.com/books/1234000001811/ch07.html#debugging_tips

関連する問題