PIG负载没有给出正确的输出

时间:2016-05-14 16:15:11

标签: hadoop apache-pig

我一直在尝试从HDFS加载文件并使用Dump检查输出。但我没有得到欲望的输出。我的输入文件('/ results')如下所示:

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)

我真的不明白“(,)”在两个元组之间的位置。有人可以帮助我吗?

感谢。

2 个答案:

答案 0 :(得分:0)

您必须在PigStorage中的输入文件中指定列之间的分隔符。假设您的列由单个空格分隔

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;

答案 1 :(得分: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;

谢谢。