我有一个看起来有点像这样的黑名单文件
481295b2-30c7-4191-8c14-4e513c7e7577
481295a2-1234-4191-8c14-4e513c7e7577
和我正在加载的很多其他数据。
如何过滤掉黑名单中已有的数据?
SQL术语中的not in
种。
我尝试使用有点像this的东西
但是无法通过这种关系来完成这项工作。
答案 0 :(得分:0)
您可以使用left join
和filter
来实施它。如,
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'
。