2016-05-14 147 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;