我是Pig的新手,所以这可能是一个琐碎的问题。因此,我无法得到一个合理的答案。

有3列,如下所示:

userid  itemid action
245      4     'view'
245      6     'click'
149      12     'buy'
149      1      'click'

等等...

我有一个映射,例如:'view'=1 , 'click'=1.4 , 'buy'= 2.1等。

我想要的输出是:
userid  itemid action
245      4       1
245      6      1.4
149      12     2.1
149      1      1.4

简单的命令可以帮助我实现这一目标?
我将需要在第3列上执行一些cacluation,因此不能以字符串格式使用它。

最佳答案

使用以下映射值在HDFS中创建一个映射文件,例如:

action_string action_value
view 1
click 1.4
buy 2.1

假设此文件存储在<mapping_file>。然后只需加载此文件,然后将此文件加入原始数据集即可:
mapping = LOAD '<mapping_file>' USING PigStorage() AS action_string, action_value;
joined = JOIN original BY action, mapping BY action_string USING 'replicated';
output = FOREACH joined GENERATE userid, itemid, action_value;

还有其他方法,具体取决于您的用例和文件大小。但是我认为这是最灵活的。

08-25 04:29