2016-05-14 71 views
0

我一直在尝试从HDFS加载文件并使用Dump检查输出。但我没有得到欲望的输出。我的输入文件( '/结果')是这样的:PIG负载没有给出正确的输出

1 fail 

2 fail 

3 pass 

4 pass 

5 fail 

6 pass 

7 fail 

8 pass 

9 pass 

10 pass 

11 pass 

12 fail 

13 fail  

14 fail 

15 pass 

16 pass 

17 pass 

18 pass 

19 pass 

20 fail 

这猪命令我编码:

A = LOAD '/results' using PigStorage() as (f1:int, f2:chararray); 
Dump A; 

但我得到的输出如下:

(1,fail) 
(,) 
(2,fail) 
(,) 
(3,pass) 
(,) 
(4,pass) 
(,) 
(5,fail) 
(,) 
(6,pass) 
(,) 
(7,fail) 
(,) 
(8,pass) 
(,) 
(9,pass) 
(,) 
(10,pass) 
(,) 
(11,pass) 
(,) 
(12,fail) 
(,) 
(13,fail) 
(,) 
(14,fail) 
(,) 
(15,pass) 
(,) 
(16,pass) 
(,) 
(17,pass) 
(,) 
(18,pass) 
(,) 
(19,pass) 
(,) 
(20,fail) 

我真的不明白从哪里来“(,)”已经到了两个元组之间。有人可以帮我吗 ?

谢谢。

回答

0

你有在PigStorage()方法中指定正确的分隔符以正确读取文件内容。您需要修改基础上的分隔符,你有一个方法,像输入数据:

对于单空间:

INPUT = LOAD '/results' USING PigStorage(' ') AS (f1: int, f2:chararray); 
DUMP INPUT 

对于制表符分隔:

INPUT = LOAD '/results' USING PigStorage('\t') AS (f1:int, f2:chararray); 
DUMP INPUT; 

对于第二部分你()在输出中,我看到输入数据中每两行之间有一条空行。

解决方案:

逻辑上过滤掉空记录(考虑分隔符是制表符):

INPUT = LOAD '/results' USING PigStorage('\t') AS (f1: int, f2: chararray); 
INPUT = FILTER INPUT BY f2 IS NOT NULL; 
DUMP INPUT; 

谢谢。

+0

非常感谢!有效 – Sri

0

您必须指定输入文件列之间的分隔符在PigStorage.Assuming你列一个空格

A = LOAD '/results' USING PigStorage(' ') as (f1:int, f2:chararray); 
DUMP A; 

分离如果它是一个标签

A = LOAD '/results' USING PigStorage('\t') as (f1:int, f2:chararray); 
DUMP A;