Spark入门指南:从基础概念到实践应用全解析( 四 )

  • Kubernetes 模式:在 Kubernetes 模式下 , Spark 应用程序会连接到一个 Kubernetes 集群,并在集群中运行 。这种模式支持动态资源分配和容器化部署 。
  • 五、RDD详解RDD的概念在Spark中十分重要 , 上面只是简单的介绍了一下,下面详细的对RDD展开介绍 。
    RDD是“Resilient Distributed Dataset”的缩写,从全称就可以了解到RDD的一些典型特性:
    • Resilient(弹性):RDD之间会形成有向无环图(DAG),如果RDD丢失了或者失效了 , 可以从父RDD重新计算得到 。即容错性 。
    • Distributed(分布式):RDD的数据是以逻辑分区的形式分布在集群的不同节点的 。
    • Dataset(数据集):即RDD存储的数据记录,可以从外部数据生成RDD , 例如Json文件,CSV文件,文本文件,数据库等 。
    RDD里面的数据集会被逻辑分成若干个分区,这些分区是分布在集群的不同节点的,基于这样的特性,RDD才能在集群不同节点并行计算 。
    1.RDD特性
    • 内存计算:Spark RDD运算数据是在内存中进行的,在内存足够的情况下,不会把中间结果存储在磁盘,所以计算速度非常高效 。
    • 惰性求值:所有的转换操作都是惰性的 , 也就是说不会立即执行任务,只是把对数据的转换操作记录下来而已 。只有碰到action操作才会被真正的执行 。
    • 容错性:Spark RDD具备容错特性,在RDD失效或者数据丢失的时候,可以根据DAG从父RDD重新把数据集计算出来,以达到数据容错的效果 。
    • 不变性:RDD是进程安全的,因为RDD是不可修改的 。它可以在任何时间点被创建和查询 , 使得缓存,共享,备份都非常简单 。在计算过程中,是RDD的不可修改特性保证了数据的一致性 。
    • 持久化:可以调用cache或者persist函数 , 把RDD缓存在内存、磁盘,下次使用的时候不需要重新计算而是直接使用 。
    2.RDD操作RDD支持两种操作:
    • 转换操作(Transformation) 。
    • 行动操作(Actions) 。
    (1) 转换操作(Transformation)
    转换操作以RDD做为输入参数 , 然后输出一个或者多个RDD 。转换操作不会修改输入RDD 。Map()、Filter()这些都属于转换操作 。
    转换操作是惰性求值操作,只有在碰到行动操作(Actions)的时候,转换操作才会真正实行 。转换操作分两种:「窄依赖」和「宽依赖」 。
    下面是一些常见的转换操作:
    转换操作
    描述
    map
    将函数应用于 RDD 中的每个元素,并返回一个新的 RDD
    filter
    返回一个新的 RDD,其中包含满足给定谓词的元素
    flatMap
    将函数应用于 RDD 中的每个元素,并将返回的迭代器展平为一个新的 RDD
    union
    返回一个新的 RDD,其中包含两个 RDD 的元素
    distinct
    返回一个新的 RDD,其中包含原始 RDD 中不同的元素
    groupByKey
    将键值对 RDD 中具有相同键的元素分组到一起,并返回一个新的 RDD
    reduceByKey
    将键值对 RDD 中具有相同键的元素聚合到一起,并返回一个新的 RDD
    sortByKey
    返回一个新的键值对 RDD , 其中元素按照键排序
    (2)行动操作(Action)
    Action是数据执行部分 , 其通过执行count,reduce,collect等方法真正执行数据的计算部分 。
    Action 操作
    描述
    reduce
    通过函数聚合 RDD 中的所有元素
    collect
    将 RDD 中的所有元素返回到驱动程序
    count
    返回 RDD 中的元素个数
    first
    返回 RDD 中的第一个元素
    take
    返回 RDD 中的前 n 个元素
    takeOrdered
    返回 RDD 中的前 n 个元素,按照自然顺序或指定的顺序排序
    saveAsTextFile
    将 RDD 中的元素保存到文本文件中
    foreach
    将函数应用于 RDD 中的每个元素
    3.RDD 的创建方式创建RDD有3种不同方式:


    推荐阅读