pig根据另一列中的值添加列

时间:2013-12-09 18:28:52

标签: hadoop apache-pig

我在元组中有一个名为avg_rating的列。我想基于avg_rating中的值创建一个新列NPS。以下是avg_rating数据的样子

avg_rating
3
4
8
9
10

因此,如果评级> = 8,那么Pr 如果评级等级在4&之间。 8 NPS将是P. 如果评级是< 4然后NPS将是D

这是我正在尝试的,

yy = FOREACH avg_rating GENERATE avg_rating,((int)wtr>=8 ?'P':(int)wtr>=4 && (int)wtr<8 ?'PR':'D');

我在turnery操作员中使用多个条件但是给我错误

  
    

语法错误,'('

处或附近的意外符号   

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这里有几个问题。

  1. 您无法生成avg_rating
  2. 而不是&amp;&amp;
  3. 围绕嵌入式三元组的另一组括号。
  4. 解析:

    avg_rating = load '/tmp' using PigStorage('\t') as (wtr:INT);
    
    yy = FOREACH avg_rating GENERATE 
    wtr,
    ((int)wtr>=8 ? 'P' : ((int)wtr>=4 and (int)wtr<8 ? 'PR' : 'D')) as v;
    
    describe yy;