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

Hadoop Pig:无效的场投影;投影字段不存在,hadoop,mapreduce,apache-pig,bigdata,Hadoop,Mapreduce,Apache Pig,Bigdata,这给了我以下格式: describe filter_records; 我想显示details1和details2中的firstname。我试过这个: filter_records: {details1: (firstname: chararray,lastname: chararray,age: int,gender: chararray),details2: (firstname: chararray,lastname: chararray,age: int,gender: chararra

这给了我以下格式:

describe filter_records;
我想显示
details1
details2
中的
firstname
。我试过这个:

filter_records: {details1: (firstname: chararray,lastname: chararray,age: int,gender: chararray),details2: (firstname: chararray,lastname: chararray,age: int,gender: chararray)}
但我得到了一个错误:

display_records = FOREACH filter_records GENERATE display1.firstname;

请说明出现此错误的原因以及解决方法。

我在
筛选\u记录中未看到任何关系名称
display1
。我猜您使用的不是
details1.firstname
而是
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).
似乎在details1和details2中使用了相同的变量名(firstname、lastname、age、gender)。这样打印时会出现重复错误

display_records = FOREACH filter_records GENERATE details1.firstname;
为了解决这个问题,您需要在details1和details2关系中提供一个唯一的名称,您可以这样更改您的加载模式吗?或者,您可以在details1和details2中提供任何唯一的名称

display_records = FOREACH filter_records GENERATE details1.firstname,details2.firstname;
现在,当您尝试这样做时,您将从details1和details2中获得名字

details1:tuple(firstname1:chararray,lastname1:chararray,age1:int,sex1:chararray),details2:tuple(firstname2:chararray,lastname2:chararray,age2:int,sex2:chararray)
display_records = FOREACH filter_records GENERATE details1.firstname1,details2.firstname2;