我有两个数据集,data1
和data2
。
data2
有以下数据,
a1:u:11#eve:f:6
a1:u:12#eve:f:6
a1:u2:13#eve:f:3
a1:u1:12#eve:s:6
a1:u1:11#eve:f:6
此处:
以及#
是分隔符。我最终生成data2
,
LOAD '$data2' USING PigStorage(':') AS
(ad: chararray,
a_id: chararray,
cid_eve1: chararray,
name: chararray,
len: int);
然后我将第3列分成两列,
FOREACH data2 GENERATE
ad AS ad,
a_id AS a_id,
FLATTEN(STRSPLIT(cid_eve1, '#')) AS (cid: int, eve1: chararray),
name AS name,
len AS len;
现在,当我与data2
加入data1
时,我什么都没得到。
我也试过了,
FOREACH data2 GENERATE
ad AS ad,
a_id AS a_id,
SUBSTRING(cid_eve1,0,INDEXOF(cid_eve1,'#',0)) AS cid: int,
name AS name,
len AS len;
加入时也不返回任何内容。我正在加入第3栏,cid
。
我甚至为这两种情况转储了data2
并看到了输出。这是预期的。但是,当我将以下文件用作data2
时,
a1:u:11:eve:f:6
a1:u:12:eve:f:6
a1:u2:13:eve:f:3
a1:u1:12:eve:s:6
a1:u1:11:eve:f:6
并加载为,
LOAD '$data2' USING PigStorage(':') AS
(ad: chararray,
a_id: chararray,
cid: int,
eve1: chararray,
name: chararray,
len: int);
然后连接返回正确的结果。我不知道为什么会这样。有人可以帮忙或提出任何建议。
data1
,第二列($1
)为a_id
,最后一列为cid
。加入他们两个。
1,u,true,true,4,1,1,1,1,1,11,21,31,11
1,u,true,true,4,1,1,1,1,1,11,21,32,11
1,u,true,true,4,1,1,1,1,1,11,21,33,11
1,u,true,true,4,1,1,1,1,1,11,21,31,11
1,u,true,true,4,1,1,1,1,1,11,21,32,11
1,u,true,true,4,1,1,1,1,1,11,21,33,11
2,u,true,true,4,1,1,1,1,1,12,22,34,12
2,u,true,true,4,1,1,1,1,1,13,22,35,13
2,u1,true,false,4,1,1,1,1,0,12,22,34,12
2,u1,true,false,4,1,1,1,1,0,13,22,35,13
2,u1,true,true,9,1,1,1,1,1,12,22,34,12
2,u1,true,true,9,1,1,1,1,1,13,22,35,13
3,u,false,false,4,1,0,1,0,0,14,24,31,14
3,u,false,false,4,1,0,1,0,0,11,22,31,11
4,u,true,NULL,0,1,1,0,0,0,11,22,33,11
4,u1,false,NULL,0,1,0,0,0,0,11,22,33,11
2,u,true,true,4,1,1,1,1,1,12,22,34,12
2,u,true,true,4,1,1,1,1,1,13,22,35,13
2,u2,true,true,7,1,1,1,1,1,12,22,34,12
2,u2,true,true,7,1,1,1,1,1,13,22,35,13
答案 0 :(得分:0)
我找到了答案。问题在于数据类型。我试图将chararray
读入int
,但没有对其进行类型转换。
当我将其更改为时,
FOREACH data2 GENERATE
ad AS ad,
a_id AS a_id,
(int)SUBSTRING(cid_eve1,0,INDEXOF(cid_eve1,'#',0)) AS cid,
name AS name,
len AS len;
有效。