通过现有关系在猪中过滤

时间:2014-06-15 20:48:57

标签: hadoop apache-pig hdfs

我有一个看起来有点像这样的黑名单文件

481295b2-30c7-4191-8c14-4e513c7e7577
481295a2-1234-4191-8c14-4e513c7e7577

和我正在加载的很多其他数据。 如何过滤掉黑名单中已有的数据? SQL术语中的not in种。 我尝试使用有点像this的东西 但是无法通过这种关系来完成这项工作。

1 个答案:

答案 0 :(得分:0)

您可以使用left joinfilter来实施它。如,

data = load '/path/to/data.txt' as (id: chararray);                
blacklist = load '/path/to/blacklist.txt' as (id: chararray);      
jnd = join data by id left outer, blacklist by id using 'replicated';
filtered = filter jnd by blacklist::id is null;                      
result = foreach filtered generate data::id as id;
dump result;     

在此示例中,输入数据将通过黑名单连接(左外)。之后,我们通过is null检查删除了与黑名单匹配的行。

using 'replicated'用于告诉Pig将第二个关系加载到内存中以加速连接。如果blacklist太大而无法放入内存,则可以删除using 'replicated'