我是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;
还有其他方法,具体取决于您的用例和文件大小。但是我认为这是最灵活的。