Apache Pig仅加载第一个嵌套元组

问题描述 投票:0回答:1

我使用official document中的确切样本:

我有data.txt:

(3,8,9) (mary,19)
(1,4,7) (john,18)
(2,5,8) (joe,18)

我跑步:

A = LOAD 'data.txt' AS (F:tuple(f1:int,f2:int,f3:int),T:tuple(t1:chararray,t2:int));
dump A

我总是得到:

((3,8,9),)
((1,4,7),)
((2,5,8),)

第二个嵌套元组从未加载。我尝试了0.16.0和0.17.0的两个版本。

apache-pig
1个回答
0
投票

问题应该出在您创建的数据文件上。在创建数据文件时,两个元组之间应该有tab作为数据文件中的分隔符。如果存在space,那么我们需要相应地更改装入查询。

a)使用制表符(\ t)作为分隔符或分隔符。

grunt> A = LOAD '/home/ec2-user/data' AS (F:tuple(f1:int,f2:int,f3:int),T:tuple(t1:chararray,t2:int));
grunt> DESCRIBE A;
A: {F: (f1: int,f2: int,f3: int),T: (t1: chararray,t2: int)}
grunt> dump A;
((3,8,9),(mary,19))
((1,4,7),(john,18))
((2,5,8),(joe,18))

b]使用单个空格()作为分隔符或分隔符。

grunt> A = LOAD '/home/ec2-user/data' AS (F:tuple(f1:int,f2:int,f3:int),T:tuple(t1:chararray,t2:int));
grunt> DESCRIBE A;
A: {F: (f1: int,f2: int,f3: int),T: (t1: chararray,t2: int)}
grunt> dump A;
((3,8,9),)
((1,4,7),)
((2,5,8),)

#使用PigStorage(''),如果您仍然想使用空间作为文件的分隔符。

grunt> A = LOAD '/home/ec2-user/data' USING PigStorage(' ') AS (F:tuple(f1:int,f2:int,f3:int),T:tuple(t1:chararray,t2:int));
grunt> DESCRIBE A;
A: {F: (f1: int,f2: int,f3: int),T: (t1: chararray,t2: int)}
grunt> dump A;
((3,8,9),(mary,19))
((1,4,7),(john,18))
((2,5,8),(joe,18))
© www.soinside.com 2019 - 2024. All rights reserved.