Spark案例实战之四

一.微博专栏分析

1.需求:有一个微博网站,下面有很多栏目,每个栏目下面都有几千万用户,每个用户会有很多的粉丝,要求取出各栏目粉丝量最多的用户TopN。【可用TreeMap实现,专栏:feature, 粉丝:fan】
日志每行记录如下:
体育 user01 user04 user05 user08 user09 user10
其中体育是专栏名,user01是用户名,后面的都是user01的粉丝。
2.实现方法:

  • 将专栏名和用户名作为一个key,然后将粉丝数作为value。
  • 然后再排序从高到低输出即可
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

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

    val text = sc.textFile("C:\\Users\\enmonster\\Desktop\\data1.txt")
    var res1: RDD[Array[String]] = text.map(line => line.split(" "))//split line with space
    var fansNum = 0

    val res2 = res1.map(x => (x(0),x(1),x.length-2) )//get x(0) x(1) x.length-2 form a map
    res2.collect.foreach(println) //print

    val res3: RDD[((String, String), Int)] = res2.map(x => ((x._1,x._2),x._3))
    val res4 = res3.sortBy(x=>x._2,false).groupBy(x=> x._1._1)
    res4.foreach(println)
  }
}

3.微博专栏的信息如下:

体育 user01 user04 user05 user08 user09 user10
体育 user04 user05 user08 user09 user10
体育 user10 user33 user38 user29 user18 user12 user14
明星 user03 user02 user05 user04 user03 user23 user14 user06
明星 user02 user11 user07
明星 user06 user25 user03 user09 user07
文化 user10 user33 user38 user29 user18 user12 user14 user03 user05 user04  user23 user14 user06 user02 user11 user07
文化 user11 user03 user09 user07 user18 user42 user54