栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

key-value类型算子学习

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/751460.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号