ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

用户画像

2021-01-17 09:59:12  阅读:220  来源: 互联网

标签:map name val 标签 用户 sparkConf ._ 画像


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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有