spark概念强化

概念

Transformation

用来从存在的rdd产生新rdd。

rdd图系,成为rdd操作图或者rdd依赖图。是逻辑执行计划,有向无循环图DAG,

Transformation是懒惰执行,当执行Action时才被执行。

分类

根据RDD转换前后数据集大小变化来分类:
    不变:map()
    变大:flatMap(), union(), Cartesian()
    变小:filter, count, distinct, sample
    
根据被用来计算的元素是否存在于父RDD的一个分区中来分类:
    Narrow transformation:
        窄转换,被用来计算的元素存在于父RDD的一个分区中。
        举例:map(), filter(),sample(),union()
    Wide transformation:
        广泛转换,被用来计算的元素存在于父RDD的多个分区中。
        举例:groupbyKey() ,join(), reducebyKey()

Action

acton和真实的数据集打交道。

action的值存到drivers或者外部存储系统。

action让rdd从懒执行到真移动。

action会产生非RDD结果值。

辨析

map() VS flatmap()

相同:接收RDD的一行作为输入,在行上执行function

区别:
    map 一个输入对应一个输出。可以用来输出每一行的长度。
    faltmap 一个输入可能对应多个输出。经常用来拆分单词

map() VS mapPartitions()

相同:都可以实现给出一个函数,去映射RDD中所有元素的效果。

区别:可编程的细粒度有区别
    map 对一个元素进行编程。
    mapPartitions 对一个分区进行编程。比如当用到外部数据库
    连接时常用,一个分区使用一个连接,而不是每一个元素使用一
    个连接。
    

mapPartitions() VS mapPartitionsWithIndex()

区别:
    mapPartitionsWithIndex 另外有一个表示分区下标编号参数。

reduce() VS fold()

相同:都有两个元素作为输入,产生的与元素相同类型的输出。

区别:
    reduce 多了一个初始化的输入。
    reduce 空集合抛出异常,fold 可以兼容空集合。
    

数量

分区数,任务数,CPU核心数。

这些数量的设置跟程序调优息息相关。
参考

Spark RDD Operations-Transformation & Action with Example

你可能感兴趣的:(spark)