通过连接两个柱子过滤猪

时间:2014-10-10 06:52:41

标签: hadoop apache-pig bigdata

我有以下格式的两个表

表1:com_Data

#cc bb mm#

41 22 2563

42 24 3562

表2:

#name cid#

soman 42-47-2562

我想比较表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); 

如何过滤表格?

2 个答案:

答案 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);

然后可以使用过滤器。