0

我有 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* 等。

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

4

1 回答 1

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 的索引。

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

于 2013-01-08T17:42:01.113 回答