【问题标题】:Pig: Invalid field Projection; Projected Field does not exist猪:无效的字段投影;投影字段不存在
【发布时间】:2015-04-01 13:57:31
【问题描述】:
describe filter_records;

这给了我以下格式:

filter_records: {details1: (firstname: chararray,lastname: chararray,age: int,gender: chararray),details2: (firstname: chararray,lastname: chararray,age: int,gender: chararray)}

我想显示来自details1details2firstname。我试过这个:

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

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

【问题讨论】:

    标签: hadoop mapreduce apache-pig bigdata


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 2015-06-06
      相关资源
      最近更新 更多