在 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 语句?

如何在 Pig Latin 中进行“总结”?

何时不使用 Pig Latin

仅使用 Pig Latin 在 Pig 中加载具有不同分隔符的非结构化数据

Pig Latin 在一个 FILTER 语句中使用两个数据源