0

我是 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 列上执行一些计算,因此不能使用字符串格式。

4

1 回答 1

2

使用这些映射值在 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;

根据您的用例和文件大小,还有其他方法。但我认为这是最灵活的。

于 2013-10-16T02:10:28.510 回答