我有以下格式的两个表
表1:com_Data
表2:
我想比较表1中的三列cc bb mm,并需要过滤掉表2中与组合值匹配的所有列
如何在猪中过滤
当尝试连接三个用' - '分隔的列时,使用pig会导致错误 下面是我使用的代码
a = LOAD 'default.com_data' USING org.apache.hcatalog.pig.HCatLoader();
b = foreach a generate concat(cc,'-',bb,'-',mm);
如何过滤表格?
答案 0 :(得分:1)
它看起来像cc,bb和mm的数据类型是数字。你可以将数据类型更改为charrarray或bytearray,以便concat可以工作。请参阅以下示例
input.txt
41 22 2563
42 24 3562
43 46 1234
input1.txt
sasi 41-22-2563
soman 42-47-2562
test 43-46-1234
PigScript:
A = LOAD 'input.txt' USING PigStorage(' ') AS (cc:chararray,bb:chararray,mm:chararray);
AA = LOAD 'input1.txt' USING PigStorage(' ') AS (name:chararray,cid:chararray);
B = FOREACH A GENERATE CONCAT(cc,'-',bb,'-',mm) as newCid;
C = JOIN AA BY cid,B BY newCid;
D = FOREACH C GENERATE $0,$1;
DUMP D;
Output:
(sasi,41-22-2563)
(test,43-46-1234)
答案 1 :(得分:0)
您可以为此使用显式强制转换。 当您可以加载文件时,将cc,bb和mm视为一个整数值,而'-'是一个字符。
您可以这样编写查询
a = LOAD 'default.com_data' USING org.apache.hcatalog.pig.HCatLoader();
b = foreach a generate concat((chararray)cc,'-',(chararray)bb,'-',(chararray)mm);
然后可以使用过滤器。