【Spark学习】初步了解RDD中的装饰者模式

Spark RDD是什么?

RDD(resilient Distributed Dataset)弹性分布式数据集,是spark中基本的计算(数据)抽象。它代表一个不可变,可分区,里面的元素可以并行(多个线程一起执行)计算的集合

装饰者模式是什么?

装饰者模式是设计模式其中的一种,是指在不改变原有对象的基础之上,将功能附加到对象上。提供了比继承更有弹性的替代方案(扩展原有对象功能)。简单来说,就是给对象添加一个功能,但并没有改变原有对象

RDD如何体现装饰者模式?

1.先用一段简单wordcount代码来引出RDD是如何体现装饰者模式

    //需要统计列表中每个单词出现的个数
    //创建一个列表
    val list = List("hnswxy is very good","hello scala","hello java")

    //创建SparkConf对象
    val conf:SparkConf = new SparkConf().setMaster("local[*]").setAppName("wordCount01")

    //创建Spark上下文对象,并将conf传入
    val sc = new SparkContext(conf)

    //从集合中创建RDD,并将集合传入
    val rdd:RDD[String] = sc.makeRDD(list)
    
    //将rdd对象进行扁平化操作,取出list中的每个元素
    val rdd1:RDD[String] = rdd.flatMap(_.split(" "))

    //将rdd1对象进行map操作,将字符串中每个单词转换为k-v形式,v为 1
    val rdd2:RDD[(String,Int)] = rdd1.map(_ -> 1)

    //将rdd2对象进行reduceByKey操作,将相同key值的value聚合
    val rdd3:RDD[(String,Int)] = rdd2.reduceByKey(_+_)

    //将最终结果打印
    rdd3.collect().foreach(println)

运行结果

(scala,1)
(hnswxy,1)
(is,1)
(very,1)
(hello,2)
(java,1)
(good,1)

3.算子
①算子(operate):从认知心理学的角度看,解决问题其实是将问题的初始状态,通过一系列操作(算子)问题的状态进行转换,然后达到完成(解决)状态
②spark中所有的RDD方法都可以称之为算子,算子分为两大类:转换算子 行动算子
③由一个RDD转换到另一个RDD,可以通过丰富的算子实现,不再像MapReduce那样只能写map和redeuce了

3.可以从上述代码中看出:
先利用列表创建了一个RDD对象,然后不断的利用算子将RDD转换成另一个RDD,也就是将RDD装饰成另外一个RDD,原有的RDD并没有改变,这种RDD的转换就体现了装饰者模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章