茄子快傳數據分析(一)----數據清理

茄子快傳數據分析(一)----數據清理

茄子快傳原理

流程圖: 
這裏寫圖片描述android

數據

「events」: 「1473367236143\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000027\u0001\n1473367261933\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000028\u0001\n1473367280349\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000029\u0001\n1473367331326\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000030\u0001\n1473367353310\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000031\u0001\n1473367387087\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000032\u0001\n1473367402167\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000033\u0001\n1473367451994\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000034\u0001\n1473367474316\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000035\u0001\n1473367564181\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000036\u0001\n1473367589527\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000037\u0001\n1473367610310\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000038\u0001\n1473367624647\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000039\u0001\n1473368004298\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000040\u0001\n1473368017851\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000041\u0001\n1473369599067\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000042\u0001\n1473369622274\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000043\u0001\n」,ios

數據解析

使用json在線解析器解析爲: 
「header」: { 
「cid_sn」: 「1501004207EE98AA」, sdn碼 
「mobile_data_type」: 「」, 
「os_ver」: 「9」, 操做系統 
「mac」: 「88:1f:a1:03:7d:a8」, 物理地址 
「resolution」: 「2560x1337」, 分辨率 
「commit_time」: 「1473399829041」, 提交時間 
「sdk_ver」: 「103」, sdk版本 
「device_id_type」: 「mac」, 設備類型 
「city」: 「江門市」, 城市 
「android_id」: 「」, 安卓設備的安卓id 
「device_model」: 「MacBookPro11,1」,設備型號 
「carrier」: 「中國xx」, 運營商 
「promotion_channel」: 「1」, 推廣渠道 
「app_ver_name」: 「1.7」, app版本號 
「imei」: 「」, 入網表示 
「app_ver_code」: 「23」, 公司內部版本碼 
「pid」: 「pid」, 
「net_type」: 「3」, 網絡類型 
「device_id」: 「m.88:1f:a1:03:7d:a8」, 設備ip 
「app_device_id」: 「m.88:1f:a1:03:7d:a8」, 
「release_channel」: 「appstore」, 發佈渠道 
「country」: 「CN」, 
「time_zone」: 「28800000」, 時區編碼 
「os_name」: 「ios」, 操做系統類型 
「manufacture」: 「apple」, 生產廠家 
「commit_id」: 「fde7ee2e48494b24bf3599771d7c2a78」, 事件標示 
「app_token」: 「XIAONIU_I」, app標示 
「account」: 「none」, 登錄帳號 
「app_id」: 「com.appid.xiaoniu」, app組名 
「build_num」: 「YVF6R16303000403」, 編譯號 
「language」: 「zh」 系統所使用語言 

}json

數據清理

一、 數據清理需求分析 
release_channel,device_id,city,device_id_type,app_ver_name 這幾個字段若是缺失,則過濾 
將數據整成 字段,字段,字段,…… 這種形式 
在每條數據中添加一個字段:user_id(值就是mac) 
二、數據清理代碼markdown

public class AppLogClean {
    public static class MapTask extends Mapper<LongWritable, Text, Text, NullWritable> {
        StringBuilder sb = new StringBuilder(); Text k = new Text(); @Override protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, NullWritable>.Context context) throws IOException, InterruptedException { // 獲得每行數據 String line = value.toString(); JSONObject ob1 = JSON.parseObject(line); JSONObject ob2 = ob1.getJSONObject("header"); // 關鍵數據是否有丟失 // release_channel,device_id,city,device_id_type,app_ver_name // 這幾個字段若是缺失,則過濾 if (StringUtils.isBlank(ob2.getString("release_channel")) || StringUtils.isBlank(ob2.getString("device_id")) || StringUtils.isBlank(ob2.getString("city")) || StringUtils.isBlank(ob2.getString("device_id_type")) || StringUtils.isBlank(ob2.getString("app_ver_name")) || StringUtils.isBlank(ob2.getString("os_name")) || StringUtils.isBlank(ob2.getString("mac"))) { return; } if (ob2.getString("app_ver_name").equals("android")) { if (StringUtils.isBlank(ob2.getString("android_id"))) { return; } } sb.append(ob2.getString("cid_sn")).append(","); sb.append(ob2.getString("mobile_data_type")).append(","); sb.append(ob2.getString("os_ver")).append(","); sb.append(ob2.getString("mac")).append(","); sb.append(ob2.getString("resolution")).append(","); sb.append(ob2.getString("commit_time")).append(","); sb.append(ob2.getString("sdk_ver")).append(","); sb.append(ob2.getString("device_id_type")).append(","); sb.append(ob2.getString("city")).append(","); sb.append(ob2.getString("android_id")).append(","); sb.append(ob2.getString("device_model")).append(","); sb.append(ob2.getString("carrier")).append(","); sb.append(ob2.getString("promotion_channel")).append(","); sb.append(ob2.getString("app_ver_name")).append(","); sb.append(ob2.getString("imei")).append(","); sb.append(ob2.getString("app_ver_code")).append(","); sb.append(ob2.getString("pid")).append(","); sb.append(ob2.getString("net_type")).append(","); sb.append(ob2.getString("device_id")).append(","); sb.append(ob2.getString("app_device_id")).append(","); sb.append(ob2.getString("release_channel")).append(","); sb.append(ob2.getString("country")).append(","); sb.append(ob2.getString("time_zone")).append(","); sb.append(ob2.getString("os_name")).append(","); sb.append(ob2.getString("manufacture")).append(","); sb.append(ob2.getString("commit_id")).append(","); sb.append(ob2.getString("app_token")).append(","); sb.append(ob2.getString("account")).append(","); sb.append(ob2.getString("app_id")).append(","); sb.append(ob2.getString("build_num")).append(","); sb.append(ob2.getString("language")).append(","); String uid = ob2.getString("mac");//??? sb.append(uid); k.set(sb.toString()); context.write(k, NullWritable.get()); //清除sb的數據 sb.delete(0, sb.length()); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf); //設置map,設置driver,設置輸出類型。。。 job.setJarByClass(AppLogClean.class); job.setMapperClass(MapTask.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(NullWritable.class); FileInputFormat.addInputPath(job, new Path("D:\\a\\appuserdata\\input\\20170101")); FileOutputFormat.setOutputPath(job, new Path("D:\\a\\appuserdata\\out")); //不須要reduce 能夠設置爲0 job.setNumReduceTasks(0); boolean ret = job.waitForCompletion(true); //System.exit(ret?0:1); System.out.println(ret?"你很優秀":"滾去調bug!"); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94

三、數據清理完的文件 
這裏寫圖片描述 
四、清理完成的數據格式 
1501004207EE98AA,,22,1c:77:f6:78:f5:75,1080x1920,1473396818952,103,mac,江門市,867830021735040, 
字段與字段間以逗號隔開網絡

相關文章
相關標籤/搜索