我有一个过滤关键字列表(大约1000个数字),我需要使用这个列表过滤pig中的一个关系字段。
最初,我声明了如下关键字:%declare p1'.keyword1.'。。。
%声明p1000'.keyword1000';
然后我做了如下过滤:
filter=fitler src by(不是$0匹配'$p1')和(不是$0匹配'$p2')和(不是$0匹配“$p1000”);
转储已过滤;
假设我的源关系在src中,我需要对第一个字段应用过滤,即$0。
如果我把过滤器的数量减少到100-200个,它就可以正常工作了。但随着过滤器数量增加到1000个。它不起作用。
有人能提出一个解决办法来得到正确的结果吗?
提前谢谢
2条答案
按热度按时间bhmjp9jg1#
一种浅层方法是将过滤分为几个阶段。在第一阶段过滤关键字1到100,然后过滤另外100,以此类推,总共过滤(count(keywords)/100)个阶段。然而,考虑到数据的更多细节,可能有更好的解决方案。
对于上面的浅层解决方案,您可以将pig脚本 Package 在shell脚本中,该脚本对输入进行打包,并开始对正在筛选的当前关键字子集运行。
zvms9eto2#
您可以编写一个简单的过滤器自定义项,在其中执行所有检查,例如: