Saprk distinct 功能
去重
去重后可以指定分区有几个 例如distinct(numPartitions=3),去重后可以指定分区有3个
案例演示
需求:将List(1, 2, 3, 4, 5, 5, 4, 3, 3)去重后输出到控制台,形式如下
package com.xcu.bigdata.spark.core.pg02_rdd.pg022_rdd_transform
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/**
* @Package : com.xcu.bigdata.spark.core.pg02_rdd.pg022_rdd_transform
* @Author :
* @Date : 2020 11月 星期五
* @Desc : 全局去重
*/
object Spark08_Distinct {
def main(args: Array[String]): Unit = {
//创建配置文件
val conf: SparkConf = new SparkConf().setAppName("").setMaster("local[*]")
//创建SparkContext,该对象是提交的入口
val sc = new SparkContext(conf)
//创建RDD
val rdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4, 5, 5, 4, 3, 3), numSlices = 3)
//用mapPartitionsWithIndex的目的是为了证明全局去重和shuffle
rdd.mapPartitionsWithIndex((index: Int, datas: Iterator[Int]) => {
println(index + "分区:" + datas.mkString(","))
datas
}).collect()
println("***********************************")
//去重
rdd.distinct().mapPartitionsWithIndex((index, datas) => {
println(index + "分区:" + datas.mkString(","))
datas
}).collect()
//释放资源
sc.stop()
}
}
结果:
0分区:1,2,3
1分区:4,5,5
2分区:4,3,3
***********************************
0分区:3
2分区:5,2
1分区:4,1分析:去重后的数据被重新分配到各个分区,说明此过程有shuffle
本文介绍如何使用Apache Spark实现全局去重,并通过一个具体案例进行演示。案例中采用List(1,2,3,4,5,5,4,3,3)作为数据源,通过Spark RDD操作去除重复数据,并展示去重后的数据重新分布情况。
2971

被折叠的 条评论
为什么被折叠?



