PIg 标量大于 0
PIg scalar is bigger than 0
我有以下代码
Data1 = LOAD '/user/cloudera/Class Ex 2/Data 1' USING PigStorage(',') as (Name:chararray,ID:chararray,text_1:chararray,Grade_1:int,Grade_2:int,Grade_3:int,Grade_4:int);
Data2 = LOAD '/user/cloudera/Class Ex 2/Data 2' USING PigStorage(',') as (Name:chararray,ID:chararray,text_2:chararray,Grade_5:int,Grade_6:int,Grade_7:int,Grade_8:int);
Data_3 = JOIN Data1 BY Data1.ID,Data2 BY Data2.ID;
Data_4 = FOREACH Data_3 GENERATE [=10=],,,,,,,,,,,;
Data_5 = FOREACH Data_4 GENERATE
Name,
ID,
text_1,
SIZE(text_1),
REPLACE(text_1,'or',''),
SIZE(REPLACE(text_1,'or','')),
SIZE(text_1)-SIZE(REPLACE(text_1,'or','')),
text_2,
SIZE(text_2),
REPLACE(text_2,'or',''),
SIZE(REPLACE(text_2,'or','')),
SIZE(text_2)-SIZE(REPLACE(text_2,'or','')),
(+++++++)/8;
DESCRIBE Data_5;
STORE Data_5 Into '/user/cloudera/Class Ex 2/Data_output' USING PigStorage(',');
本质上我要加载2组数据,然后做一些基本的文本统计和操作。
一切正常,直到最后一条语句 STORE。
当我添加它时,我收到标量错误。
我在这里做错了什么?
谢谢大家!
首先,Pig 只评估最终导致 STORE
或 DUMP
的别名(这称为惰性评估)。因此,您的错误始终存在;一旦您添加了 STORE
语句,它就会被捕获。由于您没有粘贴完整的跟踪,我认为您的错误出现在您尝试使用点 (.
) 运算符访问字段 ID
的第三个语句中。您需要将其更改为以下之一:
1) 直接引用ID
字段,因为在Data1
和Data2
中只有一个名为ID
的字段:
Data_3 = JOIN Data1 BY ID, Data2 BY ID;
2) 如果确实需要消除歧义,请使用 ::
而不是 .
:
Data_3 = JOIN Data1 BY Data1::ID, Data2 BY Data2::ID;
如果您想知道为什么点 (.
) 运算符会导致错误,请查看以下问题:
我有以下代码
Data1 = LOAD '/user/cloudera/Class Ex 2/Data 1' USING PigStorage(',') as (Name:chararray,ID:chararray,text_1:chararray,Grade_1:int,Grade_2:int,Grade_3:int,Grade_4:int);
Data2 = LOAD '/user/cloudera/Class Ex 2/Data 2' USING PigStorage(',') as (Name:chararray,ID:chararray,text_2:chararray,Grade_5:int,Grade_6:int,Grade_7:int,Grade_8:int);
Data_3 = JOIN Data1 BY Data1.ID,Data2 BY Data2.ID;
Data_4 = FOREACH Data_3 GENERATE [=10=],,,,,,,,,,,;
Data_5 = FOREACH Data_4 GENERATE
Name,
ID,
text_1,
SIZE(text_1),
REPLACE(text_1,'or',''),
SIZE(REPLACE(text_1,'or','')),
SIZE(text_1)-SIZE(REPLACE(text_1,'or','')),
text_2,
SIZE(text_2),
REPLACE(text_2,'or',''),
SIZE(REPLACE(text_2,'or','')),
SIZE(text_2)-SIZE(REPLACE(text_2,'or','')),
(+++++++)/8;
DESCRIBE Data_5;
STORE Data_5 Into '/user/cloudera/Class Ex 2/Data_output' USING PigStorage(',');
本质上我要加载2组数据,然后做一些基本的文本统计和操作。 一切正常,直到最后一条语句 STORE。 当我添加它时,我收到标量错误。
我在这里做错了什么? 谢谢大家!
首先,Pig 只评估最终导致 STORE
或 DUMP
的别名(这称为惰性评估)。因此,您的错误始终存在;一旦您添加了 STORE
语句,它就会被捕获。由于您没有粘贴完整的跟踪,我认为您的错误出现在您尝试使用点 (.
) 运算符访问字段 ID
的第三个语句中。您需要将其更改为以下之一:
1) 直接引用ID
字段,因为在Data1
和Data2
中只有一个名为ID
的字段:
Data_3 = JOIN Data1 BY ID, Data2 BY ID;
2) 如果确实需要消除歧义,请使用 ::
而不是 .
:
Data_3 = JOIN Data1 BY Data1::ID, Data2 BY Data2::ID;
如果您想知道为什么点 (.
) 运算符会导致错误,请查看以下问题: