distinct是Tranformation算子,具有shuffle
功能:去重
源码
分区取设定分区或者按照核数
将rdd用map变为对偶元组,然后用reduceBykey,
我的理解为:reduceBykey是将key建返回,value取出第一个就不叠加了,局部聚合和全局聚合都用这一个函数
在用map取出key
代码实现
object DistinctDemo { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("DistinctDemo").setMaster("local[*]") val sc = new SparkContext(conf) val rdd: RDD[Int] = sc.parallelize(List(5, 5, 6, 6, 7, 8, 8, 8),2) val rdd2: RDD[(Int, Null)] = rdd.map((_, null)) val rdd3 = rdd2.reduceByKey((x, _) => x) val rdd4 = rdd3.map(_._1) rdd4.saveAsTextFile("distinct-out2") sc.stop() } }