其他分享
首页 > 其他分享> > 用户画像

用户画像

作者:互联网

数据中有设备的识别码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
一共有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