我有 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* 等。
关于如何去做的任何想法?
我有 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* 等。
关于如何去做的任何想法?
最简单的解决方案是使用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 的索引。
请参阅优秀书籍 Programming Pig的“Advanced Pig Latin”章节的“Cross”部分。特别注意有关CROSS
生成大量数据的警告。如果您有大量输入,您可能希望制定一种特定于应用程序的方式来构建连接键,这样您就不需要模糊匹配。