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 只评估最终导致 STOREDUMP 的别名(这称为惰性评估)。因此,您的错误始终存在;一旦您添加了 STORE 语句,它就会被捕获。由于您没有粘贴完整的跟踪,我认为您的错误出现在您尝试使用点 (.) 运算符访问字段 ID 的第三个语句中。您需要将其更改为以下之一:

1) 直接引用ID字段,因为在Data1Data2中只有一个名为ID的字段:

Data_3 = JOIN Data1 BY ID, Data2 BY ID;

2) 如果确实需要消除歧义,请使用 :: 而不是 .

Data_3 = JOIN Data1 BY Data1::ID, Data2 BY Data2::ID;

如果您想知道为什么点 (.) 运算符会导致错误,请查看以下问题: