key-value类型算子学习

17.partitionBy

将数据按照指定 Partitioner 分区规则重新进行分区。Spark 默认的分区器是 HashPartitioner

方法由pairRDDFunctions提供。

隐式转化(二次编译)rdd中有伴生对象。implicit rddtoPairRDDFunction这样的函数叫隐式函数。

maprdd.partitionBy(new HashPartitioner(2))
    .saveAsTextFile("output")

hashPartitioner中参数设置是mod 余数一样分在一起。

如果重分区的分区器和当前 RDD 的分区器一样,底层会判断分区器是不是一样,首先匹配类型和分区数量。会直接返回自己。

   //TODO partitionBy
    val rdd1 = sc.makeRDD(List(1, 2, 3, 4),2)

    //int 转为 tuple类型
    val maprdd = rdd1.map((_, 1))
    val newrdd=maprdd.partitionBy(new HashPartitioner(2))
    val newrdd2=newrdd.partitionBy(new HashPartitioner(2))

Spark 还有其他分区器 ctrl+H可以看子类

abstract Partitioner 下有,HashPartitioner,RangePartitioner,PythonPartitioner。其中PythonPartitioner是private只能运行在特定的包中。可以用的是hash和range。range可以用来排序。

如果想按照自己的方法进行数据分区,自己写一个分区器。match case when那种。之后再看。

18. reduceByKey:相同的 Key 对 Value 进行聚合

scala语言中一般的聚合操作都是两两聚合

//TODO partitionBy
    val rdd1 = sc.makeRDD(List(
      ("a",1), ("a",2),("a", 3), ("b",4)
    ))
    val rddnew = rdd1.reduceByKey((x: Int, y: Int) => {
      println(s"x=${x},y=${y}")
      x + y
    })
    rddnew.collect().foreach(println)

输出:

x=1,y=2
x=3,y=3
(a,6)
(b,4)
4不参与运算。如果key只有一个,不参与运算。

19.groupByKey:将数据源的数据根据 key 对 value 进行分组,相同key的数据分在一个组中,形成一个对偶元组,元组第一个元素就是key,第二个元素是相同key的value集合

输出:

(a,CompactBuffer(1, 2, 3))
(b,CompactBuffer(4))

20.aggregateByKey

21.foldByKey

22.combineByKey

23.sortByKey

24.join

25.leftOuterJoin

26.cogroup

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值