Board logo

标题: Spark数据操作—RDD操作(3) [打印本页]

作者: look_w    时间: 2019-2-19 15:41     标题: Spark数据操作—RDD操作(3)

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)))




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0