我有一个包含URL的文件和3个包含URL的文件,我想看看它们是否存在于第一个文件中
第一个文件的示例是
http://www.url1.com/x////,
http://www/urln.com/zzz/zzz/zzz/zzzz/zzzz/zz
筛选文件示例:
过滤器1
网址:url1.com
网址:url2.com
过滤器2
网址:url5.com
网址:url6.com/ddfd
网址:urlx.org
我想做的是,在同一个过程中(如果可能的话)检查filter1中的任何url或filter2中的任何url等等是否在第一个文件中,如果是,则将匹配写入以该过滤器命名的文件(filter name无关)。每个过滤器的重要信息
输出是这样的
筛选器1.out
http://www.url1.com//sss http://www.url2.com//x/x
2条答案
按热度按时间zujrkrfu1#
假设筛选文件适合计算节点上的内存—使用perl或其他常用语言匹配并通过此筛选流式传输数据,例如:
这是一次性的。从定义$filter和其他参数的bash脚本调用这个pig脚本。在$script中实现字符串匹配和输出,该脚本将加载$filter1、$filter2和$filter3,从stdin进行匹配并以所需格式生成输出。
qyzbxkaa2#
我会给你一个高层次的描述,我会做你的鞋:
将所有文件作为数据集加载。我们可以称它们为url、filter1、filter2和filter3
如果我理解正确的话,这三个过滤器之间没有区别,所以只要将它们合并为一个新的数据集,我们称之为big\u过滤器。
使用正则表达式将url与big\ filter连接起来,从url中提取基本url。regex\u extract是一个内置的pig函数。内部联接将除去url中所有不在筛选器中的项。
仅从结果数据集生成url列。
对步骤4中生成的数据集运行distinct。
使用各种pig store函数之一,以您最喜欢的形式存储步骤5中生成的数据集。