前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pig询问top k,每个返回hour和ad_network_id最大的两个记录(SUBSTRING,order,COUNT_STAR,limit)

pig询问top k,每个返回hour和ad_network_id最大的两个记录(SUBSTRING,order,COUNT_STAR,limit)

作者头像
全栈程序员站长
发布2022-07-05 20:57:06
2860
发布2022-07-05 20:57:06
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君。

pig里面有一个TOP功能。我不知道为什么用不了。有时间去看看pig源代码。

SET job.name ‘top_k’;

SET job.priority HIGH;

–REGISTER piggybank.jar; REGISTER wizad-etl-udf-0.1.jar;

–DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader(); DEFINE SequenceFileLoader com.vpon.wizad.etl.pig.SequenceFileCSVLoader();

–%default cleanedLog /user/wizad/data/wizad/cleaned/2014-07-30/*/part* %default cleanedLog /user/wizad/data/wizad/cleaned/$date/*/part*

%default output_path /user/wizad/tmp/hour_count

origin_cleaned_data = LOAD ‘$cleanedLog’ USING SequenceFileLoader AS (ad_network_id:chararray, wizad_ad_id:chararray, guid:chararray, id:chararray, create_time:chararray, action_time:chararray, log_type:chararray, ad_id:chararray, positioning_method:chararray, location_accuracy:chararray, lat:chararray, lon:chararray, cell_id:chararray, lac:chararray, mcc:chararray, mnc:chararray, ip:chararray, connection_type:chararray, imei:chararray, android_id:chararray, android_advertising_id:chararray, udid:chararray, openudid:chararray, idfa:chararray, mac_address:chararray, uid:chararray, density:chararray, screen_height:chararray, screen_width:chararray, user_agent:chararray, app_id:chararray, app_category_id:chararray, device_model_id:chararray, carrier_id:chararray, os_id:chararray, device_type:chararray, os_version:chararray, country_region_id:chararray, province_region_id:chararray, city_region_id:chararray, ip_lat:chararray, ip_lon:chararray, quadkey:chararray);

show_log= FILTER origin_cleaned_data by log_type==’1′;

–extract column for analyzing。提取子字段做为新属性 original_hour = FOREACH show_log GENERATE ad_network_id,wizad_ad_id,guid,app_category_id,log_type,SUBSTRING(create_time,11,13) AS hour; –(wizad_ad_id,guid,log_type,hour)

hour_group = GROUP original_hour BY (hour,app_category_id);–按属性分类,

hour_count = foreach hour_group{ –guid_data = $1.guid; –uniq_guid = distinct guid_data;–去重处理。

查唯一个数。 ad_network_ids = original_hour.ad_network_id;

uniq_ad_network_ids = distinct ad_network_ids;

–统计每一个包下的个数,将后面uniq_ad_network_ids分成单个记录。

比方,uniq_ad_network_ids原值{3,5},现变成两条记录,分为(xx,3)(xx,5)两条记录

generate flatten(group), COUNT_STAR($1) AS pv, flatten(uniq_ad_network_ids);

}

describe hour_count; –查看结构为:hour_count: {group::hour: chararray,group::app_category_id: chararray,pv: long,uniq_ad_network_ids::ad_network_id: chararray}

group_hour_count = group hour_count by (hour,ad_network_id); top_2_data = foreach group_hour_count { –top_dataset = TOP(2,hour_count.pv, hour_count);–top函数 不能用。有谁用过告诉一声。我就不用看源代码拉,哈哈

–hour_data = hour_count;

–top k实现方式。order排序,limit返回前k个。

order_hour_count = order hour_count by pv DESC;

top2_hour_count = limit order_hour_count 2;

–generate group, top2_hour_count.pv, top2_hour_count.app_category_id;– 注意,后面是两个bag。分开的。 generate flatten(top2_hour_count ); }

版权声明:本文博客原创文章,博客,未经同意,不得转载。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117619.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档