文档章节

spark实现共同好友

f
 fan1fan
发布于 2019/08/15 15:13
字数 314
阅读 87
收藏 0

基础数据:

用户,好友1 好友2 好友3 .....

A1,A2 A3 A4 A5 A6
A2,A1 A3 A4 A6
A3,A1 A2 A4 A5 A6
A4,A1 A2 A3
A5,A1 A3 A7
A6,A1 A4
A7,A2 A5
代码实现:

import org.apache.spark.{SparkConf, SparkContext}
object ComFriendV2 {

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("common_friends").setMaster("local")
    val sc = new SparkContext(conf)
    val rdd = sc.textFile("e://friends.txt");
    rdd.flatMap(line => {
      val data = line.split(",");
      val person = data(0);
      val friends = data(1)
      val friendArray = friends.split(" ");
      for (item <- friendArray)
        yield (item, person)
    }).combineByKey(
      List[String](_),
      (a: List[String], b: String) => a :+ b,
      (x: List[String], y: List[String]) => x ++ y)
      .flatMap(pair => {
        val friend = pair._1
        val persons = pair._2.toArray
        var map = Map[String, String]()
        for (i <- 0 until persons.length) {
          for (j <- (i + 1) until persons.length) {
            val personI = persons(i)
            val personJ = persons(j)
            if (personI > personJ) {
              map += ((personI + "-" + personJ) -> friend)
            } else {
              map += ((personJ + "-" + personI) -> friend)
            }
          }
        }
        map
      }).reduceByKey(_ + "," + _).foreach(println)
  }
}

结果值:

(A4-A1,A3,A2)
(A6-A2,A4,A1)
(A7-A1,A5,A2)
(A5-A1,A3)
(A2-A1,A3,A6,A4)
(A7-A3,A5,A2)
(A7-A4,A2)
(A4-A3,A1,A2)
(A5-A2,A3,A1)
(A4-A2,A3,A1)
(A6-A5,A1)
(A6-A4,A1)
(A6-A1,A4)
(A3-A1,A6,A4,A5,A2)
(A6-A3,A4,A1)
(A3-A2,A6,A4,A1)
(A5-A3,A1)
(A5-A4,A3,A1)

性能优化点后续更新

© 著作权归作者所有

f
粉丝 4
博文 4
码字总数 1388
作品 0
广州
私信 提问
加载中

评论(1)

草丛有蟲
草丛有蟲
优秀 用val srcGraph = Graph(vertices, edges)这个功能更强大
Spark GraphX宝刀出鞘,图文并茂研习图计算秘笈与熟练的掌握Scala语言【大数据Spark

Spark GraphX宝刀出鞘,图文并茂研习图计算秘笈 大数据的概念与应用,正随着智能手机、平板电脑的快速流行而日渐普及,大数据中图的并行化处理一直是一个非常热门的话题。图计算正在被广泛地...

Spark亚太研究院
2014/08/29
1.6K
0
Kubernetes助力Spark大数据分析

Kubernetes 作为一个广受欢迎的开源容器协调系统,是Google于2014年酝酿的项目。从Google趋势上看到,Kubernetes自2014年以来热度一路飙升,短短几年时间就已超越了大数据分析领域的长老Had...

店家小二
2018/12/17
0
0
Spark比拼Flink:下一代大数据计算引擎之争,谁主沉浮?

AI 前线导读: 做大数据绝对躲不过的一个热门话题就是实时流计算,而提到实时流计算,就不得不提 Spark 和 Flink。Spark 从 2014 年左右开始迅速流行,刚推出时除了在某些场景比 Hadoop Map...

AI前线
2018/07/23
0
0
SegmentFault D-Day 2015 北京:聊聊大数据

SegmentFault D-Day 介绍 SegmentFault D-Day,是由国内最前沿的开发者社区 SegmentFault 主办的技术沙⻰,于2014年正式启动。2015年上半年D-Day已在北、上、广、深、杭等城市成功举办9场,活...

文洁洁洁
2015/11/17
145
0
Spark成为大数据高手进阶步骤

什么是Spark Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapRedu...

MoksMo
2015/11/05
2.2K
1

没有更多内容

加载失败,请刷新页面

加载更多

被关系数据库建表和升级折磨?因为你没用大道至简的Flyway

前言 六年前Flyway已经是我TDD开发、持续集成工具栈中的重要一环了,作为早期用户,我早就应该为它做个”广告“,可惜对创业者来说时间太宝贵了,现在趁着疫情才有机会在家里总结点东西。虽然...

chentao106
25分钟前
70
0
解决ClientDataSet连接脱离框架导致某些字段无法在客户端修改值的问题

{ function: 解决ClientDataSet连接脱离框架导致某些字段无法在客户端修改值的问题 description: 将一个复制Data的clientdataset做成可写。因为直接赋值cdsData.data=cdsTemp.data会连着dat...

乞丐88
26分钟前
47
0
Java日期时间API系列25-----Jdk8中java.time包中的新的日期时间API类,使用MonthDay计算十二星座。

  通过Java日期时间API系列24-----Jdk8中java.time包中的新的日期时间API类,MonthDay类源码和应用,对比相同月日时间。对MonthDay简单做了说明和应用。十二星座是根据公历生日类计算属于哪...

侠客张三
33分钟前
40
0
iOS在应用初始化阶段可能会执行的一些动作

排名不分先后 检查应用是否为首次启动。 检查用户是否已经登陆。 如果用户已经登录,尽可能地载入之前的状态。 连接服务器以拉取最新的变更。 检查应用是否由某个深层链接唤起。如果是,还需...

mouos
34分钟前
46
0
我可以从Django中的模板访问settings.py中的常量吗?

我希望通过模板访问settings.py中的一些内容,但是我不知道该怎么做。 我已经试过了 {{CONSTANT_NAME}} 但这似乎不起作用。 这可能吗? #1楼 如果使用基于类的视图: ## in settings.py#...

技术盛宴
37分钟前
57
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部