猪:无效的字段投影;投影场不存在

时间:2015-02-02 15:14:57

标签: hadoop mapreduce apache-pig bigdata

describe filter_records;

这给了我以下格式:

filter_records: {details1: (firstname: chararray,lastname: chararray,age: int,gender: chararray),details2: (firstname: chararray,lastname: chararray,age: int,gender: chararray)}

我想显示firstnamedetails1中的details2。我试过这个:

display_records = FOREACH filter_records GENERATE display1.firstname;

但我收到错误:

Invalid field projection. Projected field [display1] does not exist in schema: details1:tuple(firstname:chararray,lastname:chararray,age:int,gender:chararray),details2:tuple(firstname:chararray,lastname:chararray,age:int,gender:chararray).

请提出为什么会出现此错误以及如何解决此问题。

1 个答案:

答案 0 :(得分:4)

我在display1中没有看到任何关系名称filter_records。我猜你使用details1.firstname而不是display1.firstname。你能改变这样的剧本吗?

display_records = FOREACH filter_records GENERATE details1.firstname;

似乎您在details1和details2中使用了相同的变量名称(名字,姓氏,年龄,性别)。打印时会出现重复错误

display_records = FOREACH filter_records GENERATE details1.firstname,details2.firstname;

要解决此问题,您需要在details1和details2关系中提供唯一的名称,您能否像这样更改加载架构?或者你可以在details1和details2中给出任何唯一的名称。

details1:tuple(firstname1:chararray,lastname1:chararray,age1:int,sex1:chararray),details2:tuple(firstname2:chararray,lastname2:chararray,age2:int,sex2:chararray)

现在,当您尝试这样做时,您将获得来自details1和details2

的名字
display_records = FOREACH filter_records GENERATE details1.firstname1,details2.firstname2;