• Spark学习之RDD编程(2)


    Spark学习之RDD编程(2)

    1. Spark中的RDD是一个不可变的分布式对象集合。

    2. 在Spark中数据的操作不外乎创建RDD、转化已有的RDD以及调用RDD操作进行求值。

    3. 创建RDD:1)读取一个外部数据集2)在驱动器程序里分发驱动器程序中的对象集合。

    4. RDD支持的操作:

    1)转换操作,由一个RDD生成一个新的RDD。
    2)行动操作,对RDD进行计算结果,并把结果返回到驱动器程序中,或者把结果存储到外部存储系统(如HDFS)。
    

    5. Spark程序或者shell会话都会按如下方式工作:

    1)从外部数据创建出输入RDD。
    2)使用诸如filter()这样的转化操作对RDD进行转化,以定义一个新的RDD。
    3)告诉Spark对需要被重用的中间结果RDD执行persist()操作。
    4)使用行动操作 (例如count()和first()等)来触发一次并行计算,Spark会对计算进行优化后在执行。
    

    6. 创建RDD

    快速创建RDD,把程序中一个已有的集合传给SparkContext的parallelize()方法,不过这种方法除了开发原型和测试时,这种方式用的并不多。
    Python中的parallelize()方法
    
        lines = sc.parallelize(["pandas","i like pandas"])
    Scala中的parallelize()方法
    
        val lines = sc.parallelize(List("pandas","i like pandas"))
    Java中的parallelize()方法
    
        JavaRDD<String> lines = sc.parallelize(Arrays.asList("pandas","i like pandas"))

    7. 惰性求值

    RDD的转化操作都是惰性求值的。
    

    8. 向Spark传递函数

    8.1 Python
    传递比较短的函数,使用lambda表达式来传递;也可以传递顶层函数或是定义的局部函数。
    8.2 Scala,可以定义的内联函数、方法的引用或静态方法传递给Spark,就行Scala的其他函数式API一样。
    8.3 Java,函数需要作为实现了Spark的org.apache.spark.api.java.function包中的任一函数接口的对象来传递。
    

    9. 常见的转化操作和行动操作

    9.1 针对个元素的转化操作
    flatmap()       对每个输入元素生成多个输出元素。
    map()           接受一个函数,把这个函数用于RDD中的每个元素,将函数的返回结果作为结果RDD中的对应元素的。返回的类型不必和输入类型相同。
    filter()        接受一个函数,并将RDD中满足该函数的元素放入新RDD中返回。
    distinct()      去重
    sample(withReplacement,fraction,[seed])         对RDD采样,以及是否替换
    9.2 伪集合操作
    合并和相交要求RDD数据类型相同。
    (不需混洗)union()           生成一个包含两个RDD中所有元素的RDD
    (需要混洗)intersection()    求两个RDD共同的元素的RDD
    (需要混洗)subtract()        移除一个RDD中的内容
    (需要混洗)cartesian)()      与另一个RDD的笛卡尔积
    
  • 相关阅读:
    现代软件工程 第八章 【需求分析】练习与讨论
    现代软件工程 第七章 【MSF】练习与讨论
    现代软件工程 第六章 【敏捷流程】练习与讨论
    PPT演说技巧
    Mac上最强大的截图软件-xnip
    什么是函数倾轧(name mangling)?
    编程--在线提交系统(Online Judge)
    C++ 的多继承与虚继承
    C++ 中 string和char* 的区别
    编程语言中优先级与结合性
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467809.html
Copyright © 2020-2023  润新知