用户画像
作者:互联网
数据中有设备的识别码
一共有7个标签
里面涉及到词库 所以要用到ES会更加合理
这写标签都是围绕用户的id,一共会有15种id
在用户标签下,如果id用户情况相同时,相同标签的累加(求交集),不同的求并集
上下文标签的实现
在一天的时间内 早上产生可一个日志 晚上也产生一条数据等等 把这些日志进行标签化
标签聚集化
商圈标签
地图领域 求两坐标直接的距离 GIS的GEOHASH求解
调用百度地图的逆地址编码 进行知识库的建立,
然后将每一天的日志调用百度的逆地址接口进行计算周围的商圈,传回来将(经纬度对应的geohashcode和商圈信息)存入到mysql数据库中
这里如果在数据库查不到商圈,就直接去百度请求
需求:好友推荐
SparkGraph的Edge(起点,终点,关系)
object UserTagMergeDome {
def main(args: Array[String]): Unit = {
// 2 创建sparkconf->sparkContext
val sparkConf = new SparkConf()
sparkConf.set("spark.testing.memory", "2147480000")
sparkConf.setAppName(s"${this.getClass.getSimpleName}")
sparkConf.setMaster("local[*]")
// RDD 序列化到磁盘 worker与worker之间的数据传输
sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
val sc = new SparkContext(sparkConf)
val data:RDD[Array[String]] = sc.textFile(args(0)).map(_.split("\t"))
//创建点集合
val uv:RDD[(VertexId,(String,List[(String ,Int)]))] = data.flatMap(arr => {
//区分名和标签
val userNames = arr.filter(_.indexOf(":") == -1)
val tagsAndNum = arr.filter(_.indexOf(":") != -1).map(tags => {
val tagsNum = tags.split(":")
(tagsNum(0), tagsNum(1).toInt)
}).toList
val nameAndags = userNames.map(name => {
if (name.equals(userNames(0))) (name.hashCode.toLong, (name, tagsAndNum))
else (name.hashCode.toLong, (name, List.empty[(String, Int)]))
})
nameAndags
})
//创建边集合
val ue = data.flatMap(arr => {
val userNames = arr.filter(_.indexOf(":") == -1)
//结果(id,共同最小的顶点ID)
userNames.map(name => Edge(userNames(0).hashCode.toLong, name.hashCode.toLong, 0))
})
//创建图
val graph = Graph(uv,ue)
val vertices = graph.connectedComponents().vertices
//聚合数据,获取结果
vertices.join(uv).map{
case(id,(cmId,(name,tags))) => (cmId,(name,tags))
}.reduceByKey{
case(t1,t2)=> {
val k = t1._1 ++ "-" ++ t2._1
val v = (t1._2 ++ t2._2).groupBy (_._1).mapValues (_.foldLeft(0)(_ + _._2)).toList
(k,v)
}
}.map(t=>(t._2._1,t._2._2)).foreach(println)
sc.stop()
}
}
统一用户识别需求:
用于用户的标签合并
其实上面的三条数据是属于同一个人,但是却变成了三个日志;
同一行只有一个人携带标签 其他人不携带标签数据,要不然后面同一个日志,标签的出现次数会累加多次,
聚合标签
可以再加多一个 男女标签的
标签数据的衰减
用户的兴趣不是一成不变的
总结
每天都会产生日志,基于标签体系进行标签的打,里面会根据标签的逻辑体系的判断,比如男女标签是怎么大的;
标签:map,name,val,标签,用户,sparkConf,._,画像 来源: https://blog.csdn.net/weixin_37850264/article/details/112723623