spark算子基础

创建数组
scala> val a = sc.parallelize(Array(("zhangsan", 99, 98, 100),("lisi", 99, 98, 100),("wangwu", 99, 98, 100)))
a: org.apache.spark.rdd.RDD[(String, Int, Int, Int)] = ParallelCollectionRDD[28] at parallelize at <console>:24

要求:筛选出名字为zhang开头的总分最高分
一、
scala> a.filter(x=>x._1.startsWith("zhang")).map(x=>(x._1,x._2+x._3+x._4)).sortBy(x=> - x._2).take(1)
res30: Array[(String, Int)] = Array((zhangsan,297))

二、
scala> a.filter(x=>x._1.startsWith("zhang")).map(x=>(x._1,x._2+x._3+x._4)).reduceByKey((x,y) => if (x>y) x else y)
res28: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[51] at reduceByKey at <console>:26

三、
scala> a.filter(x=>x._1.startsWith("zhang")).map(x=>(x._2+x._3+x._4,x._1)).max
res31: (Int, String) = (297,zhangsan)

四、
scala> a.filter(x=>x._1.startsWith("zhang")).map(x=>("zhang",(x._1,x._2+x._3+x._4))).reduceByKey((x,y) => if (x._2>y._2) x else y).collect
res34: Array[(String, (String, Int))] = Array((zhang,(zhangsan,297)))
scala> a.filter(x=>x._1.startsWith("zhang")).map(x=>("zhang",(x._1,x._2+x._3+x._4))).reduceByKey((x,y) => if (x._2>y._2) x else y).map(x=>x._2).collect
res35: Array[(String, Int)] = Array((zhangsan,297))

五、
scala> a.filter(x => x._1.startsWith("zhang")).map(x => (x._1, x._2 + x._3 + x._4)).
     |   groupBy(x => x._1.substring(0, 5)).map(x => {
     |     var name = ""
     |     var sumscore = 0
     |     val itor = x._2.iterator
     |     for (e <- itor) {
     |       if (e._2 > sumscore) {
     |         name = e._1;
     |         sumscore = e._2
     |       }
     |     }
     |     (name, sumscore)
     |   }).collect()
res3: Array[(String, Int)] = Array((zhangsan,297))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值