在Pig Latin中使用FOREACH读了var语言有麻烦

时间:2018-06-21 03:02:04

标签: hadoop apache-pig

我遇到了以下猪代码。

我需要通过FOREACH读取的prevarus变量具有以下DESCRIBE:

  

UnionD1D2_Distinct:{UnionD1D2_Foreach1 :: null :: display_site:   chararray,UnionD1D2_Foreach1 :: efectivos_click:   long,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 个答案:

答案 0 :(得分:0)

在别名上使用FOREACH时,无需再次使用别名来引用变量。例如,您可以只使用UnionD1D2_Distinct.UnionD1D2_Foreach1::efectivos_click1来代替UnionD1D2_Foreach1::efectivos_click1

请尝试:

UnionD1D2_Calc = FOREACH UnionD1D2_Distinct GENERATE
    (UnionD1D2_Foreach1::efectivos_click1/UnionD1D2_Foreach2::total_click2)*100 AS ctr;

让我们知道您是否遇到相同的错误。