在好例子网,分享、交流、成长!
您当前所在位置:首页Scala 开发实例Scala编程基础 → IdMapping.scala

IdMapping.scala

Scala编程基础

下载此实例
  • 开发语言:Scala
  • 实例大小:4.55KB
  • 下载次数:5
  • 浏览次数:105
  • 发布时间:2021-10-28
  • 实例类别:Scala编程基础
  • 发 布 人:yangyingchun
  • 文件格式:.scala
  • 所需积分:2
 相关标签: ping app MAP dma AP

实例介绍

【实例简介】
【实例截图】
【核心代码】
package com.gwm import java.util.UUID import org.apache.spark.SparkContext import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD 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 = "E:\\data\\input"  val outPutPath="E:\\data\\outPut"  val edgeoutPutPath="E:\\data\\edgeoutPut"   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) // 二、处理数据为生成图做准备  // 生成今日点集合  var to_veritx: RDD[(VertexId, String)] = 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 同时出现两次以上才被记入同一个  //      .map(edge => (edge, 1))  //      .reduceByKey(_   _)  //      .filter(tp => tp._2 > 2)  //      .map(tp => tp._1)   // 三、汇总各个节点使用图计算生成图  // 单将数据重新赋值适用于以后多数据源合并  val veritx = to_veritx val edges = to_edges // 开始使用点集合与边集合进行图计算训练  val graph = Graph(veritx, edges) // 四、生成最大连通图  val graph2 = graph.connectedComponents() val vertices = graph2.vertices // 五、将最小图计算值替换成uuid  val uidRdd = vertices.map(tp => (tp._2, tp._1))
      .groupByKey()
      .map(tp => (StringUtil.replace(UUID.randomUUID().toString, "-", ""), tp._2)) // 对点与边进行统计作为记录输出 可以用于后期统计检查生成报表警报数据是否异常  val uu = veritx.map(lin=>("vertices",1)).union(edges.map(lin=>("edges",1))).reduceByKey(_   _)
      .map(tp=>tp._1 "\t" tp._2) // 将现有的数据转换成铭文识别后展示  // 将各个点的数据汇总到driver val idmpMap = veritx.collectAsMap() // 按照map方式广播出去做转换  val bc = sc.broadcast(idmpMap) // 将数据的id转换成明文  val ss = uidRdd.mapPartitions(itemap => { val vert_id_map = bc.value
      itemap.map(tp => { //从广播变量中获取id值的信息并转换  val t2 = for (ele <- tp._2) yield vert_id_map.get(ele).get //按照将要输出的数据格式进行排版 (uuid   mobile1,mobile2,mobile3,device_id1,device_2 tp._1 "\t" t2.mkString(",")
      })
    }) // 数据输出  ss.saveAsTextFile(outPutPath)
    uu.saveAsTextFile(edgeoutPutPath)
  }
}

标签: ping app MAP dma AP

实例下载地址

IdMapping.scala

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警