describe filter_records;
这给了我以下格式:
filter_records: {details1: (firstname: chararray,lastname: chararray,age: int,gender: chararray),details2: (firstname: chararray,lastname: chararray,age: int,gender: chararray)}
我想显示firstname
和details1
中的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).
请提出为什么会出现此错误以及如何解决此问题。
答案 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;