0
我有2個文件file1和file2。加入模式匹配的豬
的file1的內容是: AA BB 立方厘米
file2中的內容是: AAB F2 F3 ZZX F2 F3 BBC F2 F3
我想加入file1的(上字段1)和文件2(字段1)使用Pig輸出: aa aab f2 f3 bb bbc f2 f3
基本上,匹配必須是simi大到aa *,bb *,cc *等
關於如何去解決它的任何想法?
我有2個文件file1和file2。加入模式匹配的豬
的file1的內容是: AA BB 立方厘米
file2中的內容是: AAB F2 F3 ZZX F2 F3 BBC F2 F3
我想加入file1的(上字段1)和文件2(字段1)使用Pig輸出: aa aab f2 f3 bb bbc f2 f3
基本上,匹配必須是simi大到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
產生大量數據的警告。如果你有很大的輸入,你可能希望制定一個特定於應用程序的構造連接鍵的方法,這樣你就不需要模糊匹配。