《Spark 8》--Spark案例 之 数字排序、键值对平均值、二次排序、Top10、单表关联、Pagerank算法、自定义分区

本文详细介绍了使用Spark进行数字排序、键值对平均值计算、二次排序、Top10任务、单表关联以及实现Google的PageRank算法。例如,通过键值对计算图书销量平均值,进行多维度排序,以及处理支付金额的Top 10。此外,还展示了如何自定义分区策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数字排序

数据: 
               D:\测试数据\排序\
    sortFile1内容为:                          sortFile2内容为:
    2                                                      5956
    32                                                    22
     654                                                 650
    32                                                    92
    15
     756
    65223
   
  
   结果: (1,2)
            (2,15)
            (3,22)
            (4,32)
            (5,32)
            (6,92)
            (7,650)
            (8,654)
            (9,756)
            (10,5956)
            (11,65223)

 def main(args: Array[String]) {
        val conf = new SparkConf().setAppName("MySort").setMaster("local")
        val sc = new SparkContext(conf)
        val dataFile = "file:///D:/测试数据/排序/*"
        val data = sc.textFile(dataFile)
        var index = 0
        val result = data.filter(_.trim().length>0).map(n=>(n.trim.toInt,""))
                 .partitionBy(new HashPartitioner(1))
                 .sortByKey()
                 .map(t=>{index += 1;(index,t._1)})
        result.saveAsTextFile("file:///D:/测试数据/排序/result")
 }

2.     给定一组键值对("spark",2),("hadoop",6),("hadoop",4),("spark",6),键值对的          key表示图书名称,value表示某天图书销量,请计算每个键对应的平均值,也            就是计算每种图书的每天平均销量。

val rdd = sc.parallelize(Array(("spark",2),("hadoop",6),("hadoop",4),("spark",6)))
//rdd.mapValues(x => (x,1))  --> ("spark",(2,1)),("hadoop",(6,1)),("hadoop",(4,1)),("spark",(6,1))
//rdd.mapValues(x => (x,1)).reduceByKey((x,y) => (x._1+y._1,x._2 +y._2))
//                           --> ("spark",(2+6,1+1)),("hadoop",(6+4,1+1))
rdd.mapValues(x => (x,1)).reduceByKey((x,y) => (x._1+y._1,x._2 +y._2)).mapValues(x => (x._1 / x._2)).collect()

 

3.二次排序

    题目:要求先按账户排序,在按金额排序
    hadoop@apache          200
    hive@apache               550
    yarn@apache               580
    hive@apache               159
    hadoop@apache          300
    hive@apache                258
    hadoop@apache          150
    yarn@apache            560
    yarn@apache            260
    
    结果: 
    (hadoop@apache,List(150, 200, 300))
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值