【大数据学习 | Spark-Core】关于distinct算子

只有shuffle类的算子能够修改分区数量,这些算子不仅仅存在自己的功能,比如分组算子groupBy,它的功能是分组但是却可以修改分区。

而这里我们要讲的distinct算子也是一个shuffle类的算子。即可以修改分区。

Scala 复制代码
scala> val arr = Array(1,1,2,2,3,3,4,4,5,5,6,6)
arr: Array[Int] = Array(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6)

scala> val rdd = sc.makeRDD(arr)
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[19] at makeRDD at <console>:26

scala> rdd.distinct
res29: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[22] at distinct at <console>:26

scala> res29.collect
res30: Array[Int] = Array(1, 2, 3, 4, 5, 6)   

去重使用方式很简单。

但是原理却不简单。

思考一下怎么进行数据去重的?

这个同sql和mr是一样,都是分组完毕取出key的值。(即先groupBy,再map)

Scala 复制代码
scala> arr
res31: Array[Int] = Array(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6)

scala> sc.makeRDD(arr)
res32: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[23] at makeRDD at <console>:27

scala> res32.groupBy(t=> t)
res33: org.apache.spark.rdd.RDD[(Int, Iterable[Int])] = ShuffledRDD[25] at groupBy at <console>:26

scala> res33.map(_._1).collect
res34: Array[Int] = Array(1, 2, 3, 4, 5, 6)

distinct的底层实现是通过分组实现,分组存在shuffle,所以可以修改分区数量,所以切分阶段

能够修改分区数量的算子必须存在shuffle。但是如果人为不去设定分区数量,下游的分区数量和上游相同。

可以修改分区数量

Scala 复制代码
scala> arr
res35: Array[Int] = Array(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6)

scala> sc.makeRDD(arr,3)
res36: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[27] at makeRDD at <console>:27

scala> res36.distinct(6)
res37: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[30] at distinct at <console>:26

scala> res37.partitions.size
res38: Int = 6

scala> res36.distinct(2)
res39: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[33] at distinct at <console>:26

scala> res39.partitions.size
res40: Int = 2

distinct 可以增加也可以减少分区数量

相关推荐
V哥AI增长10 小时前
Schema.org 结构化数据与GEO技术落地:AI引擎引用机制与JSON-LD部署实证研究
大数据·运维·人工智能
嘉禾望岗50310 小时前
datagrip连接带有kerberos认证的hive
大数据·kerberos
MC皮蛋侠客11 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
爱吃面的猫11 小时前
大数据Kafka3.x之——Kafka3.3.0安装与使用(详细)
大数据·分布式·zookeeper
无忧智库12 小时前
别再“裸奔”等护网了!万字拆解常态化攻防运营体系:从“应试教育”到“实战免疫”的进阶实录(PPT)
大数据·架构
用户36105886261212 小时前
Spark 核心之自定义累加器以及版本对比变化深度剖析
大数据
观远数据12 小时前
当ChatBI遇上数据合规:AI+BI规模化落地的安全边界如何划定
大数据·人工智能·安全
具身智能进化论13 小时前
协作机器人产业进入规模化部署期,未来几年的增长从何而来
大数据·运维·人工智能·机器人·自动化·工厂方法模式
hzcj88813 小时前
汇正财经:储能装机回暖,估值有待提升
大数据·人工智能
2601_9549711313 小时前
大数据时代职场突围
大数据