我一直在尝试从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)
我真的不明白“(,)”在两个元组之间的位置。有人可以帮助我吗?
感谢。
答案 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;
谢谢。