pig:用不同的字段名连接

w1jd8yoj  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(377)

我有一组tweet,我想计算用户使用pig得到的回复数。
我的pig脚本如下所示(假设y1具有所需的json):

y2 = GROUP y1 BY in_reply_to_user_id_str;
y3 = FOREACH y2 GENERATE group AS in_reply_to_user_id_str, COUNT(y1) AS number_of_replies_to_user;
y4 = FOREACH y3 GENERATE in_reply_to_user_id_str, number_of_replies_to_user;
y5 = JOIN y1 BY user_id LEFT OUTER, y4 BY in_reply_to_user_id_str;
STORE y5 INTO '$DATA_OUTPUT' USING JsonStorage()

现在,我的输出看起来像:

{"y1::user_id":"9642792"............"y4::in_reply_to_user_id_str":"9642792","y4::number_of_replies_to_user":1}

我期待的是:

{"user_id":"9642792"..............."number_of_replies_to_user":1}

我不要别名 y1 以及 y5 . 我删除了一些不需要的字段,这些字段不是回答问题所必需的,只是为了使它更具可读性。
我该怎么做?我的pig版本(0.15)不支持 $0.. .
还有,有没有更好的方法来计算这个值?sql看起来很直截了当,但pig确实让人困惑。

bvhaajcl

bvhaajcl1#

添加一个附加步骤,从y5生成所需的字段,然后存储生成的y6关系

y5 = JOIN y1 BY user_id LEFT OUTER, y4 BY in_reply_to_user_id_str;
y6 = FOREACH y5 GENERATE y1::$0,y1::$1,y1::$2,..........y4::$0,y4::$1;
STORE y6 INTO '$DATA_OUTPUT' USING JsonStorage();

相关问题