猪:无效的字段投影;投影场不存在
Pig: Invalid field Projection; Projected Field does not exist
describe filter_records;
这给了我以下格式:
filter_records: {details1: (firstname: chararray,lastname: chararray,age: int,gender: chararray),details2: (firstname: chararray,lastname: chararray,age: int,gender: chararray)}
我想同时显示 details1
和 details2
中的 firstname
。我试过这个:
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).
请提出此错误的原因以及解决方法。
我在 filter_records
中没有看到任何关系名称 display1
。我猜你用的是 display1.firstname
而不是 details1.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;
describe filter_records;
这给了我以下格式:
filter_records: {details1: (firstname: chararray,lastname: chararray,age: int,gender: chararray),details2: (firstname: chararray,lastname: chararray,age: int,gender: chararray)}
我想同时显示 details1
和 details2
中的 firstname
。我试过这个:
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).
请提出此错误的原因以及解决方法。
我在 filter_records
中没有看到任何关系名称 display1
。我猜你用的是 display1.firstname
而不是 details1.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;