根据 Pig 中一列的每个唯一值的计数创建列
Create columns based on count of each unique value of one column in Pig
我有一个数据集,例如:
UserID Item EventType
001 A Buy
001 B Sell
031 A Sell
008 C Buy
001 C Buy
001 A Buy
008 C Sell
如何将 EventType 列拆分为每个事件的不同列。也就是说,我想要两个新列 EventType_Buy 和 EventType_Sell,其中包含每个 UserID 和 Item 对的这些事件的发生次数。
所以输出应该是这样的:
UserID Item EventType_Buy EventType_Sell
001 A 2 0
001 B 0 1
001 C 1 0
008 C 1 1
031 A 0 1
我对排序不太感兴趣,但我计划稍后在 R 中使用这些数据,因此我需要一些帮助来尝试执行此拆分为列计数。
我已经尝试为每个事件类型创建单独的对象并按 UserID 和 Item 分组,生成计数并尝试加入这些对象,但我没有取得太大的成功。
Ref : 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
输出:转储req_stats
(001,A,2,0)
(001,B,0,1)
(001,C,1,0)
(008,C,1,1)
(031,A,0,1)
我有一个数据集,例如:
UserID Item EventType
001 A Buy
001 B Sell
031 A Sell
008 C Buy
001 C Buy
001 A Buy
008 C Sell
如何将 EventType 列拆分为每个事件的不同列。也就是说,我想要两个新列 EventType_Buy 和 EventType_Sell,其中包含每个 UserID 和 Item 对的这些事件的发生次数。
所以输出应该是这样的:
UserID Item EventType_Buy EventType_Sell
001 A 2 0
001 B 0 1
001 C 1 0
008 C 1 1
031 A 0 1
我对排序不太感兴趣,但我计划稍后在 R 中使用这些数据,因此我需要一些帮助来尝试执行此拆分为列计数。
我已经尝试为每个事件类型创建单独的对象并按 UserID 和 Item 分组,生成计数并尝试加入这些对象,但我没有取得太大的成功。
Ref : 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
输出:转储req_stats
(001,A,2,0)
(001,B,0,1)
(001,C,1,0)
(008,C,1,1)
(031,A,0,1)