describe filter_records;

这给了我以下格式:
filter_records: {details1: (firstname: chararray,lastname: chararray,age: int,gender: chararray),details2: (firstname: chararray,lastname: chararray,age: int,gender: chararray)}

我想同时显示 firstnamedetails1details2 。我试过这个:
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).

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

最佳答案

我在 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;

关于hadoop - pig : Invalid field Projection; Projected Field does not exist,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28280832/

10-12 22:56