我有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 *等。
关于如何去做的任何想法?
答案 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
生成大量数据的警告。如果您有大量输入,您可能希望制定一种特定于应用程序的构造连接键的方法,这样您就不需要模糊匹配。