Spark RDD — 概述

RDD 简介

RDD是Spark的基础数据结构。 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象, 它代表一个不可变的、只读的被分区的数据集。 RDD中的每个数据集被划分为多个逻辑分区,使它们可以在集群中不同节点上被计算。

RDD提供一种基于粗粒度转换(比如 mapfilter 以及 join )的接口,这些接口会将具体的操作应用到多个数据集上。 这使得它们可以记录创建数据集的“血统”(lineage),而不需要储存真正的数据。 从而达到高效的容错性。

RDD 特点

  • 内存计算

  • 不可变

  • 容错性

  • 延迟/惰性计算(lazy evaluation)

  • 分区

  • 并行化

RDD 局限性

由于RDD只能通过粗粒度的转换被创建(或者被写), RDD非常适合将相同操作应用在整个数据集的所有的元素上的批处理应用。 RDD不太适合用于需要细粒度的更新共享状态的应用,比如web应用或者网络爬虫应用的存储系统。 对于这些应用,使用传统的纪录更新日志会更加高效。RDD的目标是为批量分析提供一个高效的编程模型。

RDD 创建

在开始之前,我们先使用 SparkSession 类中定义的builder方法初始化一个SparkSession。 初始化时需要提供参数 masterappName

val spark:SparkSession = SparkSession.builder()
  .master("local[*]")
  .appName("SparkExample")
  .getOrCreate()  

RDD主要有两种创建方式:

  • 基于parallelize创建:

val dataSeq = Seq(1,2,3,4,5,6,7,8,9,0)
val rdd=spark.sparkContext.parallelize(dataSeq)
  • 基于外部数据源创建(HDFSS3 等):

val rdd2 = spark.sparkContext.textFile("/path/textFile.txt")