一整套工业实际使用的机器学习工程方案之源数据处理
文章源码下载地址:点我下载http://inf.zhihang.info/resources/pay/7692.html
原文来自于: 算法混子博客
微信公众号文章:算法全栈之路
大家都知道,我们现在常用的机器学习平台包括 离线训练 和 在线预估 2 个模块。
其中,离线部分一般负责 log数据整理,样本处理,特征处理和模型训练等。
在线部分则包括线上的进行实时的 predict 过程 (online predict,也称为在线模型的Inference)。
如下图所示:
对于一个相对成熟的系统,我们会在 前端页面 (Html ,App等)通过SDK埋点的方式采集用户的行为日志,一般包括用户各种行为像用户开屏,页面请求、曝光,点击,下载,播放,充值等各种行为,同时也会记录 服务端 返回数据的日志,例如:对于一个广告系统来说,就有用户的请求日志和 广告下发日志等,其中,一条请求日志可能对应着多条下发日志记录。
这种系统日志通过flume,kafka ,storm 等大数据处理框架处理之后,会以 hive 表或则 hdfs 文本文件的形式保存在大数据平台上面。一般每条日志保存为log文件中的一行,涵盖可以唯一确定这次用户行为的若干字段,例如 时间戳(timestamp)、androidID、imei、userId、requestid、用户访问页面id 、用户行为等。基本上就是为了区分在某个时间某设备上谁干了什么事这样一个逻辑。
一般我们会使用 hive SQL、 Spark 或 Flink等对这些日志进行处理。对于存在hive表中的数据,我们可以有多种方式来读取数据进行处理。
这里主要介绍3中处理方法:
- hive sql
- sparksession sql
- spark Rdd
方法 1, log数据处理之-shell + hive SQL
使用 shell 脚本驱动hive sql的方式,来执行sql语句查找源数据若干字段写入固定的hive表。代码示例如下:
@欢迎关注微信公众号:算法全栈之路
@ filename format_log.sh
#!/bin/bash
source ~/.bashrc
set -x
cur_day=$1
source_table_name=user_xxx_rcv_log
des_table_name=user_xxx_rcv_data
des_table_location="hdfs:/user/base_table/${des_table_name}"
# 如果表不存在则新建表
${HIVE_HOME}/bin/hive -e "
CREATE EXTERNAL TABLE IF NOT EXISTS ${des_table_name}(${column_name}) PARTITIONED BY (day STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '${des_table_location}';
ALTER TABLE ${des_table_name} SET SERDEPROPERTIES(&