加入Pig与模式匹配

时间:2013-01-08 05:17:40

标签: apache-pig

我有2个文件file1和file2。

file1的内容是: AA BB CC

file2的内容是: aab f2 f3 zzx f2 f3 bbc f2 f3

我想使用Pig连接file1(在字段1上)和file2(在字段1上),其中输出为: aa aab f2 f3 bb bbc f2 f3

基本上,匹配必须类似于aa *,bb *,cc *等。

关于如何去做的任何想法?

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是使用CROSS运算符后跟FILTER

input1 = LOAD 'file1' AS (f1:chararray, f2, f3);
input2 = LOAD 'file2' AS (f1:chararray, f2, f3);

crossed = CROSS input1, input2;
filtered = FILTER crossed BY INDEXOF(input2::f1, input1::f1) == 0;

INDEXOF是一个内置的UDF,它在第一个字符串中搜索第二个字符串并返回第一个匹配项的索引,如果没有,则返回-1。由于您希望第二个字符串以第一个字符串开头,因此您正在寻找0的索引。

请参阅优秀的“猪编程”一书的"Advanced Pig Latin"章节的“交叉”部分。特别注意有关CROSS生成大量数据的警告。如果您有大量输入,您可能希望制定一种特定于应用程序的构造连接键的方法,这样您就不需要模糊匹配。