猪:加入不同的字段名称
Pig: Join with different field names
我有一组推文,我想在其中计算用户使用 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) 不支持 [=15=]..
。
另外,有没有更好的方法来计算这个值? SQL 看起来很简单,但 Pig 真的很混乱。
添加一个额外的步骤来从 y5 生成您需要的字段,然后存储生成的 y6 关系
y5 = JOIN y1 BY user_id LEFT OUTER, y4 BY in_reply_to_user_id_str;
y6 = FOREACH y5 GENERATE y1::[=10=],y1::,y1::,..........y4::[=10=],y4::;
STORE y6 INTO '$DATA_OUTPUT' USING JsonStorage();
我有一组推文,我想在其中计算用户使用 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) 不支持 [=15=]..
。
另外,有没有更好的方法来计算这个值? SQL 看起来很简单,但 Pig 真的很混乱。
添加一个额外的步骤来从 y5 生成您需要的字段,然后存储生成的 y6 关系
y5 = JOIN y1 BY user_id LEFT OUTER, y4 BY in_reply_to_user_id_str;
y6 = FOREACH y5 GENERATE y1::[=10=],y1::,y1::,..........y4::[=10=],y4::;
STORE y6 INTO '$DATA_OUTPUT' USING JsonStorage();