根据Pig中一列的每个唯一值的计数创建列

时间:2017-07-05 19:27:56

标签: hadoop apache-pig

我有一个数据集,例如:

$this->basePath()

如何将EventType列拆分为每个事件的不同列。也就是说,我想要两个新的列EventType_Buy和EventType_Sell,其中包含每个UserID和Item对的事件发生次数。

所以输出应该是这样的:

UserID Item EventType
  001   A     Buy
  001   B     Sell
  031   A     Sell
  008   C     Buy
  001   C     Buy
  001   A     Buy
  008   C     Sell

我对排序并不是那么感兴趣,但我打算稍后在R中使用这些数据,所以我想帮助尝试将这些数据拆分成列数。

我尝试为每种事件类型创建单独的对象,并按UserID和Item进行分组,并生成计数并尝试加入这些对象,但我没有取得多大成功。

1 个答案:

答案 0 :(得分:2)

  

参考: https://pig.apache.org/docs/r0.14.0/basic.html#foreach

猪脚本:

input_data = LOAD 'input.csv' USING PigStorage(',') AS (user_id:chararray,item:chararray,event_type:chararray);

req_stats = FOREACH(GROUP input_data BY (user_id,item)) {
                buy_bag = FILTER input_data BY event_type == 'Buy';
                sell_bag = FILTER input_data BY event_type == 'Sell';
                GENERATE FLATTEN(group) AS (user_id,item), COUNT(buy_bag) AS event_type_buy, COUNT(sell_bag) AS event_type_sell; 
};

DUMP req_stats;

输入:

001,A,Buy
001,B,Sell
031,A,Sell
008,C,Buy
001,C,Buy
001,A,Buy
008,C,Sell

输出:DUMP req_stats

(001,A,2,0)
(001,B,0,1)
(001,C,1,0)
(008,C,1,1)
(031,A,0,1)
相关问题