增量版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、主要输入数据样例
前一天输入数据样例
前一天数据输出今日作为数据输入样例
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 =>