用户标签(二):增量版ID_Mapping、Oneid图计算打通数据孤岛实现

1、与上篇文章的区别

单就实现上其实与上篇文章差距不大,主要在业务上本文解决了上篇文
章每次运行都会生成新的oneid的问题,如果每次运行都生成新的oneid那我们给标签做整理标记的时候会找不到人的!
大刀四十米

上一篇互联网民工讨债的艰辛旅程,打通数据孤岛第一版
例如:在上篇文中
1月1日 姓名:小白 手机号:9527 生成onid 1111

1月2日 姓名:小白 手机号:9527 生成onid 2222
1月2日 姓名:小黑 手机号:7896 生成onid aaaa

1月3日 姓名:小白 手机号:9527 生成onid 3333
1月3日 姓名:小黑 手机号:7896 生成onid bbbb

本文中
1月1日 姓名:小白 手机号:9527 生成onid 1111

1月2日 姓名:小白 手机号:9527 生成onid 1111
1月2日 姓名:小黑 手机号:7896 生成onid aaaa

1月3日 姓名:小白 手机号:9527 生成onid 1111
1月3日 姓名:小黑 手机号:7896 生成onid aaaa

2、主要输入数据样例

前一天输入数据样例
2020-07-13输入数据
前一天数据输出今日作为数据输入样例
2020-07-13输出数据作为今日输入数据

3、实现代码

对于本章没有读懂的建议看一下上一篇
图计算实现ID_Mapping、Oneid打通数据孤岛

import java.util.UUID
import cn.scfl.ebt.util.UtilTool
import org.apache.spark.SparkContext
import org.apache.spark.graphx._
import org.apache.spark.sql.SparkSession
import org.spark_project.jetty.util.StringUtil

/**
  * @Author: baierfa
  * @version: v1.0
  * @description: id_mapping 单天实现暂时不加入多天滚动计算 多天计算需要看另一文件YeAndTodayGraphx
  * @Date: 2020-07-05 10:24
  */
object YeAndTodayGraphx {
   
  def main(args: Array[String]): Unit = {
   


    val spark = SparkSession
      .builder
      .appName(s"${this.getClass.getName}")
      .master("local[*]")
      .getOrCreate()
    val sc = spark.sparkContext
    //    昨天数据加载
    val todayPath = "D:\\TESTPATH\\inputpath\\today\\dt=202-07-13"
    val outPutPath="D:\\TESTPATH\\outtpath\\today\\dt=202-07-13"
    val edgeoutPutPath="D:\\TESTPATH\\edgepath\\today\\dt=202-07-13"
    val yePath = "D:\\TESTPATH\\inputpath\\today\\dt=202-07-12"
    yeAndtodayIdMapping(spark,sc,todayPath,yePath,outPutPath,edgeoutPutPath)
    spark.close()
  }

  /**
    * 功能描述: <输入今天数据路径 按照文件形式输出到指定路径中 并推出今日图计算点与边集合总个数>
    *   将昨日生成完成图计算后的数据再次按照点 边集合的方式重新录入数据中进行二次图计算关联
    * 〈使用今日输入数据转换成唯一数字值 图计算之后再将数值转换回明文 生成唯一uuid〉
    *   转换时候防止昨日的数据再次发生uuid重新编辑状况 对已存在的使用昨日的值 对新生成的增量用户使用新增uuid
    * @Param: [spark, sc, todayPath, outPutPath, edgeoutPutPath]
    * @Return: void
    * @Author: baierfa
    * @Date: 2020-08-05 10:18
    */
  def yeAndtodayIdMapping(spark:SparkSession,sc: SparkContext,todayPath: String,yePath:String,outPutPath:String
                         ,edgeoutPutPath:String )={
   
    //  一、数据加载
    //    今天数据加载

    val todaydf = spark.read.textFile(todayPath)


    val yedf = spark.read.textFile(yePath)
    //    二、汇总数据集合并生成点集合
    //    生成昨日数据的点集合
    val ye_veritx = yedf.rdd.flatMap(line => 
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
课程简介:  本项目课程是一门极具综合性和完整性的大型项目课程;课程项目的业务背景源自各类互联网公司对海量用户浏览行为数据和业务数据分析的需求及企业数据管理、数据运营需求。 本课程项目涵盖数据采集与预处理、数据仓库体系建设、用户画像系统建设、数据治理(元数据管理、数据质量管理)、任务调度系统、数据服务层建设、OLAP即席分析系统建设等大量模块,力求原汁原味重现一个完备的企业级大型数据运营系统。  拒绝demo,拒绝宏观抽象,拒绝只讲不练,本课程高度揉和理论与实战,并兼顾各层次的学员,真正从0开始,循序渐进,每一个步骤每一个环节,都会带领学员从需求分析开始,到逻辑设计,最后落实到每一行代码,所有流程都采用企业级解决方案,并手把手带领学员一一实现,拒绝复制粘贴,拒绝demo化的实现。并且会穿插大量的原创解,来帮助学员理解复杂逻辑,掌握关键流程,熟悉核心架构。   跟随项目课程,历经接近100+小时的时间,从需求分析开始,到数据埋点采集,到预处理程序代码编写,到数仓体系搭建......逐渐展开整个项目的宏大视,构建起整个项目的摩天大厦。  由于本课程不光讲解项目的实现,还会在实现过程中反复揉和各种技术细节,各种设计思想,各种最佳实践思维,学完本项目并勤于实践的话,学员的收获将远远超越一个项目的具体实现,更能对大型数据系统开发产生深刻体悟,对很多技术的应用将感觉豁然开朗,并带来融会贯通能力的巨大飞跃。当然,最直接的收获是,学完本课程,你将很容易就拿到大数据数仓建设或用户画像建设等岗位的OFFER课程模块: 1. 数据采集:涉及到埋点日志flume采集系统,sqoop业务数据抽取系统等; 2. 数据预处理:涉及到各类字典数据构建,复杂结构数据清洗解析,数据集成,数据修正,以及多渠道数据用户身份标识打通ID-MAPPING等;3. 数据仓库:涉及到hive数仓基础设施搭建,数仓分层体系设计,数仓分析主题设计,多维分析实现,ETL任务脚本开发,ETL任务调度,数据生命周期管理等;4. 数据治理:涉及数据资产查询管理,数据质量监控管理,atlas元数据管理系统,atlas数据血缘管理等;5. 用户画像系统:涉及画像标签体系设计,标签体系层级关系设计,各类标签计算实现,兴趣类标签的衰减合并,模型标签机器学习算法应用及特征提取、模型训练等;6. OLAP即席分析平台:涉及OLAP平台的整体架构设计,技术选型,底层存储实现,Presto查询引擎搭建,数据服务接口开发等;7. 数据服务:涉及数据服务的整体设计理念,架构搭建,各类数据访问需求的restapi开发等;课程所涉及的技术: 整个项目课程中,将涉及到一个大型数据系统中所用到的几乎所有主要技术,具体来说,包含但不限于如下技术组件:l Hadoopl Hivel HBasel SparkCore /SparkSQL/ Spark GRAPHX / Spark Mllibl Sqoopl Azkabanl Flumel lasal Kafkal Zookeeperl Solrl Prestop

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值