图计算实现ID_Mapping、Oneid打通数据孤岛

图计算实现ID_Mapping、Oneid打通数据孤岛

  • ID_Mapping与Oneid的作用
    • 大神告诉我们Oneid能用来做什么
    • 输入数据源格式样例
    • 实现原理
    • 当日代码生成
    • 引用jar包
    • 启动命令
    • 辛苦码字如有转载请标明出处谢谢!——拜耳法
    • PS:我要在下一章在我心中不完美的你打一个淋漓尽致的标签

 

ID_Mapping与Oneid的作用

大神告诉我们Oneid能用来做什么

图计算实现ID_Mapping、Oneid打通数据孤岛插图

输入数据源格式样例

样例数据图1
图计算实现ID_Mapping、Oneid打通数据孤岛插图(1)
整理后数据图2
图计算实现ID_Mapping、Oneid打通数据孤岛插图(2)

实现原理

联通图
图计算实现ID_Mapping、Oneid打通数据孤岛插图(3)
生成最大联通图
图计算实现ID_Mapping、Oneid打通数据孤岛插图(4)
留下耀总的数据给大家练习了

当日代码生成


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 TodayGraphx {
  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:TESTPATHinputpathtodaydt=202-07-13"
    val outPutPath="D:TESTPATHouttpathtodaydt=202-07-13"
    val edgeoutPutPath="D:TESTPATHedgepathtodaydt=202-07-13"

   todayIdMapping(spark,sc,todayPath,outPutPath,edgeoutPutPath)
    spark.close()
  }
  
/**
 * 功能描述: <输入今天数据路径 按照文件形式输出到指定路径中 并推出今日图计算点与边集合总个数>
 * 〈使用今日输入数据转换成唯一数字值 图计算之后再将数值转换回明文 生成唯一uuid〉
 * @Param: [spark, sc, todayPath, outPutPath, edgeoutPutPath]
 * @Return: void
 * @Author: baierfa
 * @Date: 2020-08-05 10:18
 */
  def todayIdMapping(spark:SparkSession,sc: SparkContext,todayPath: String,outPutPath:String ,edgeoutPutPath:String )={
    //  一、数据加载

    //    今天数据加载
    val todaydf = spark.read.textFile(todayPath)
    //  二、处理数据为生成图做准备
    //    生成今日点集合
    val to_veritx = todaydf.rdd.flatMap(line => {
    //  将数据源进行分割
      val field = line.split("t")
    //把数据转换成(long,值)要想long值不重复 可以使用hashcode
    //本文用于生产环境 使用了md5加密 详细文件请看其他篇章
      for (ele <- field if StringUtil.isNotBlank(ele)&&(!"N".equals(ele))) yield (UtilTool.getMD5(ele), ele)
    })
    //    生成今日边集合
    val to_edges = todaydf.rdd.flatMap(line => {
      //  将数据源进行分割
      val field = line.split("t")
      //将数据转换 将值转换成边 用于连线 连线值这边用""想更换看个人意愿
      for (i <- 0 to field.length - 2 if StringUtil.isNotBlank(field(i))&&(!"N".equals(field(i)))
           ;j <- i + 1 to field.length - 1 if StringUtil.isNotBlank(field(j))&&(!"N".equals(field(j)))) 
           yield Edge(UtilTool.getMD5(field(i)), UtilTool.getMD5(field(j)), "")
    })
//    在数据不做多次etl数据操作下可以使用共同出现次数来判定是否归并为同一个用户
//    例如 合并起来用户 mobile 与 device_id 同时出现两次以上才被记入同一个
本站资源均源自网络,若涉及您的版权、知识产权或其他利益,请附上版权证明邮件告知。收到您的邮件后,我们将在72小时内删除。
若下载资源地址错误或链接跳转错误请联系站长。站长q:770044133。

» 图计算实现ID_Mapping、Oneid打通数据孤岛

发表评论

免登录下载网,提供全网最优质的资源集合!