在 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