2017-04-25 5 views
0

2つのファイルが結合された後にレコードをフィルタリングしたいとします。PIGを使用した結合後のデータのフィルタリング

ファイルBX-Books.csvにはブックデータが含まれています。ファイルBX-Book-Ratings.csvには書籍の評価データが含まれており、ISBNは両方のファイルの共通の列です。ファイル間の内部結合は、この列を使用して行われます。
私は2002年に出版された本を入手したいと思っています。

私は以下のスクリプトを使用しましたが、私は0レコードを取得しています。

grunt> BookXRecords = LOAD '/user/pradeep/BX-Books.csv' USING PigStorage(';') AS (ISBN:chararray,BookTitle:chararray,BookAuthor:chararray,YearOfPublication:chararray, Publisher:chararray,ImageURLS:chararray,ImageURLM:chararray,ImageURLL:chararray); 
grunt> BookXRating = LOAD '/user/pradeep/BX-Book-Ratings.csv' USING PigStorage(';') AS (user:chararray,ISBN:chararray,rating:chararray); 
grunt> BxJoin = JOIN BookXRecords BY ISBN, BookXRating BY ISBN; 
grunt> BxJoin_Mod = FOREACH BxJoin GENERATE $0 AS ISBN, $1, $2, $3, $4; 
grunt> FLTRBx2002 = FILTER BxJoin_Mod BY $3 == '2002'; 
+0

「BxJoin_Modを記述する」とは何ですか?出力?また、YearOfPublicationが2002年のデータもありますか? – Amit

+0

grunt> DESCRIBE BxJoin_Mod; BxJoin_Mod:{ISBN:chararray、BookXRecords :: BOOKTITLE:chararray、BookXRecords :: BookAuthor:chararray、BookXRecords :: YearOfPublication:CHARARR AY、BookXRecords ::出版社:chararray} –

+0

はい、私はYearOfPublicationの== 2002を持っているデータを持っています –

答えて

0

私はtest.csvとtest-rating.csvとその中から機能するPigスクリプトを作成しました。それは完璧にうまくいった。

のtest.CSV

1;abc;author1;2002 
2;xyz;author2;2003 

テストrating.csv

user1;1;3 
user2;2;5 

豚スクリプト:

A = LOAD 'test.csv' USING PigStorage(';') AS (ISBN:chararray,BookTitle:chararray,BookAuthor:chararray,YearOfPublication:chararray); 
describe A; 
dump A; 

B = LOAD 'test-rating.csv' USING PigStorage(';') AS (user:chararray,ISBN:chararray,rating:chararray); 
describe B; 
dump B; 

C = JOIN A BY ISBN, B BY ISBN; 
describe C; 
dump C; 

D = FOREACH C GENERATE $0 as ISBN,$1,$2,$3; 
describe D; 
dump D; 

E = FILTER D BY $3 == '2002'; 
describe E; 
dump E; 

出力:

A: {ISBN: chararray,BookTitle: chararray,BookAuthor: chararray,YearOfPublication: chararray} 
(1,abc,author1,2002) 
(2,xyz,author2,2003) 
B: {user: chararray,ISBN: chararray,rating: chararray} 
(user1,1,3) 
(user2,2,5) 
C: {A::ISBN: chararray,A::BookTitle: chararray,A::BookAuthor: chararray,A::YearOfPublication: chararray,B::user: chararray,B::ISBN: chararray,B::rating: chararray} 
(1,abc,author1,2002,user1,1,3) 
(2,xyz,author2,2003,user2,2,5) 
D: {ISBN: chararray,A::BookTitle: chararray,A::BookAuthor: chararray,A::YearOfPublication: chararray} 
(1,abc,author1,2002) 
(2,xyz,author2,2003) 
E: {ISBN: chararray,A::BookTitle: chararray,A::BookAuthor: chararray,A::YearOfPublication: chararray} 
(1,abc,author1,2002) 
0

要件:2データセットを持っている2002年

それが必要とされていない中で公開されている本を取得します。 "BookXRecords"でのみこれを達成できます。

grunt>BookXRecords = LOAD '/user/pradeep/BX-Books.csv' USING PigStorage(';') AS (ISBN:chararray,BookTitle:chararray,BookAuthor:chararray,YearOfPublication:chararray, Publisher:chararray,ImageURLS:chararray,ImageURLM:chararray,ImageURLL:chararray); 
grunt>A=FILTER BookXRecords BY year ='2002'; 
grunt>dump A; 
関連する問題