易观⼤数据算法
yiguan
易观⼤数据算法
思想
主要技术点采⽤了 HDFS作为存储, Spark作为数据预处理和核⼼过滤算法实现。
整个解决⽅案分为两⼤部分:
数据的预处理
查询算法实现
1.数据的预处理
1. 在数据预处理阶段,我们按⽤户进⾏了聚合,去除了对于我们⽆⽤的字段,将每⾏作为⼀个⽤户的操作集
合,按时间戳排序。
2. 时间上统⼀减去了起始时间(20170501的UTC 时间),并除以10,将long型变为了Int型存储。
3. 操作id 只保留了后两位,这已经可以作为唯⼀标识。
数据预处理的核⼼代码
var data =
sc.textFile(args(0))
.map(_.split("\t+"))
.filter(_.length > 5)
.map(items => {
val userId = items(0)
val timestamp = ((items(1).toLong - 1493568000000L)/10).toInt
val opId = items(2).substring(2).toInt
val params = items(4)
(userId, timestamp, opId, params)
})
// 预处数据
data
.groupBy(_._1)
.map((x) => {
var rs = ""
x._2.toArray.sortBy(_._2)
.foreach((item) => {
rs += item._3 + "|" + item._2 + "|" + item._4 + "|"
})
rs
评论0