使用 PIG 加入后过滤数据

Filter data after join using 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 [=10=] AS ISBN, , , , ;
grunt> FLTRBx2002 = FILTER BxJoin_Mod BY  == '2002';

我创建了一个 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 [=12=] as ISBN,,,;
describe D;
dump D;

E = FILTER D BY  == '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)

需求:获取2002年出版的图书

不需要2个数据集。 只有用了"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;