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

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)}

我想同时显示 details1details2 中的 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;