2013-12-09 48 views
2

我在称为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'); 

我使用多个条件在车削操作,但给我的错误

语法错误,达到或接近 '('

任何想法,什么是错这个意想不到的象征?

回答

3

这里有几个问题。

  1. 不能产生AVG_RATING
  2. ,取而代之的& &
  3. 另一组围绕嵌入式三元括号。

这解析:

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; 
相关问题