在 Pig Latin 中使用 FOREACH 阅读汽车时遇到问题
Posted
技术标签:
【中文标题】在 Pig Latin 中使用 FOREACH 阅读汽车时遇到问题【英文标题】:Having troble to read a var using FOREACH in Pig Latin 【发布时间】:2018-06-21 03:02:03 【问题描述】:我在使用以下猪代码时遇到问题。
我需要通过 FOREACH 读取的 previus var 具有以下 DESCRIBE:
UnionD1D2_Distinct: UnionD1D2_Foreach1::null::display_site: 字符数组,UnionD1D2_Foreach1::efectivos_click: 长,UnionD1D2_Foreach2::null::display_site: chararray,UnionD1D2_Foreach2::total_click: long
这里是示例数据:
(linuxlife.example.com,113,linuxlife.example.com,5343) (mobilesource.example.com,211,mobilesource.example.com,8120) (siliconshore.example.com,170,siliconshore.example.com,7764) (printoperator.example.com,62,printoperator.example.com,2724)
所以,FOREACH 读取的数据是:
UnionD1D2_Calc = FOREACH UnionD1D2_Distinct
GENERATE
(UnionD1D2_Distinct.UnionD1D2_Foreach1::efectivos_click1/UnionD1D2_Distinct.UnionD1D2_Foreach2::total_click2)*100 AS ctr;
但是,我总是得到以下信息:
错误 1066:无法打开别名 UnionD1D2_Calc 的迭代器。后端 错误:标量在输出中有不止一行。第一个: (filmport.example.com,121,filmport.example.com,5395),第二 :(firesale.example.com,129,firesale.example.com,5452)
我做错了什么?
【问题讨论】:
【参考方案1】:当您在别名上使用FOREACH
时,您无需再次使用别名来引用变量。例如,您可以使用 UnionD1D2_Foreach1::efectivos_click1
代替 UnionD1D2_Distinct.UnionD1D2_Foreach1::efectivos_click1
。
请尝试:
UnionD1D2_Calc = FOREACH UnionD1D2_Distinct GENERATE
(UnionD1D2_Foreach1::efectivos_click1/UnionD1D2_Foreach2::total_click2)*100 AS ctr;
如果您遇到同样的错误,请告诉我们。
【讨论】:
以上是关于在 Pig Latin 中使用 FOREACH 阅读汽车时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
Pig Latin(在 foreach 循环中过滤第二个数据源)
如何优化 PIG latin 中的 group by 语句?