3.flatMap
类似于map,但是每一个输入元素会被映射为0到多个输入元素,RDD之间的元素是一对多关系。
scala> val fmrdd =frdd.flatMap(x => x to 20)
//fmrdd: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[8] at flatMap at <console>:33
scala> fmrdd.collect
res8: Array[Int] = Array(12, 13, 14, 15, 16, 17, 18, 19, 20, 14, 15, 16, 17, 18, 19, 20, 16, 17, 18, 19, 20, 18, 19, 20)
4.sample
sample(withReplacement, fraction, seed)是根据给定的随机种子seed,随机抽样出数量为fraction的数据。其中,withReplacement:是否放回抽样;fraction:比例,0.1表示10%;seed:随机种子,相同的seed得到的随机序列是一样的。
scala> val data = sc.parallelize(1 to 1000, 3)
//data: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:27
scala> data.sample(false, 0.1,0).count
//res0: Long = 115
5.union
union(otherDataset)是数据合并,返回一个新的数据集,由原数据集和ottherDataset联合而成。
val unionRdd = RDD1.union(RDD2)
6.intersection
intersection(otherDataset)是数据交集,返回一个新的数据集,包含两个数据集的交集数据。
val rdd3 = rdd1.intersection(rdd2)
7.distinct
distinct([numTasks])数据去重,返回一个数据集,它是对两个数据集去除重复数据,numTasks参数是设置任务并行数量。
val rdd2 = rdd1.distinct()
8.groupByKey
groupByKey([numTasks])是数据分组操作,在一个由(K, V)键值对组成的数据集上调用,返回一个(K, Seq[V])对的数据集。
scala> val rdd0 = sc.parallelize(Array((1,1), (1, 2), (1,3), (2, 1), (2, 2), (2, 3)), 3)
//rdd0: org.apache.spark.rdd.RDD[(Int, Int)] = ParallelCollectionRDD[5] at parallelize at <console>:27
scala> val rdd1 = rdd0.groupByKey()
//rdd1: org.apache.spark.rdd.RDD[(Int, Iterable[Int])] = ShuffledRDD[6] at groupByKey at <console>:29
scala> rdd1.collect
//Array[(Int, Iterable[Int])] = Array((1,CompactBuffer(1, 2, 3)), (2,CompactBuffer(1, 2, 3))) |