Spark之共同好友

关于查找共同好友这部分内容,原理部分如
MapReduce之共同好友
所示,下面是改为Spark程序之后的代码

输入数据
100,200 300 400 500 600
200,100 300 400
300,100 200 400 500
400,100 200 300
500,100 300
600,100
Scala程序
package CommonFriends

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

object CommonFriends {
  def main(args: Array[String]): Unit ={
    val sparkConf=new SparkConf().setAppName("FindCommonFriends").setMaster("local")
    val sc=new SparkContext(sparkConf)

    val input="input/CommonFriends.txt"
    val output="output"

    val records=sc.textFile(input)
    //通过映射器生成如[(person1,person2),(friends)]的键值对,并对键中的数据按照大小进行排序
    val pairs=records.flatMap(s=>{
      val tokens=s.split(",")
      val person=tokens(0).toLong
      val friends=tokens(1).split("\\s+").map(_.toLong).toList
      val result=for{
        i <- 0 until friends.size
        friend=friends(i)
      }yield{
        if(person<friend)
          ((person,friend),friends)
        else
          ((friend,person),friends)
      }
      result
    })
    //按照键进行归约
    val grouped=pairs.groupByKey()
    //通过对好友列表中出现的值进行修改来查找好友列表的交集
    val commonFriends = grouped.mapValues(iter => {
      val friendCount = for {
        list <- iter
        if !list.isEmpty
        friend <- list
      } yield ((friend, 1))
      friendCount.groupBy(_._1).mapValues(_.unzip._2.sum).filter(_._2 > 1).map(_._1)
    })

    val formatedResult=commonFriends.map(
      f => s"(${f._1._1}, ${f._1._2})\t${f._2.mkString("[", ", ", "]")}"
    )

    commonFriends.saveAsTextFile(output)

    formatedResult.foreach(println)

    sc.stop()
  }
}

运行结果

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值