在 PIG 中如何投影包中存在的明确字段?

Posted

技术标签:

【中文标题】在 PIG 中如何投影包中存在的明确字段?【英文标题】:In PIG how to project disambiguited field present in bag? 【发布时间】:2015-02-18 07:47:42 【问题描述】:

我有这样的事情:

  joined = JOIN A BY F1, B BY F1 ;
  joinOutput = FOREACH joined GENERATE A::f3 AS f3, A::f4 AS f4, B::f5 AS f5 ;
  grouped = GROUP joinOutput BY f3 ;
  countOutput = FOREACH grouped FLATTEN(joinOutput) , count(f5) as COUNT ;

如果我执行 """ DESCRIBE countOutput """ 那么我会得到以下信息:

 countOutput =  joinOutput::f3 :chararray, joinOutput::f4 :int, COUNT :int 

现在,如果我尝试针对“countOutput”(即 countOutput.f3)引用 f3,我会收到错误消息,提示字段投影无效。

所以我的问题是如何针对 countOutput 投影字段 f3。

我还没有尝试过,如果这是正确的,但我可以想到以下方法 -

 countOutput.joinOutput::f3    

不确定这是否正确。

感谢任何帮助。

【问题讨论】:

【参考方案1】:

好的,尝试了几件事后找到了解决方案。我发现你可以在 FLATTEN 时明确指定模式。

所以这个特定的步骤可以重写如下:

 countOutput = FOREACH grouped FLATTEN(joinOutput) AS ( f3 :chararray, f4: int) , count(f5) as COUNT ;

现在我可以直接引用扁平字段的外部关系。 如果有人遇到同样的问题,希望这会有所帮助。

【讨论】:

以上是关于在 PIG 中如何投影包中存在的明确字段?的主要内容,如果未能解决你的问题,请参考以下文章

APACHE PIG - 模式中不存在错误投影字段 [Units_Sold]:group:chararray,D2:bag:tuple(Item_Type:chararray,Units_Sold:i

Pig:加入后字段不存在

Apache PIG - 加入后投影结果为 NULL

如何将行号投影到 Linq 查询结果中

MongoDB投影有$slice如何只显示该字段

如何在没有“as”字段猫鼬的情况下进行查找后投影