spark输出rdd数据_大数据基础---Spark_RDD

本文介绍了Spark中的Resilient Distributed Datasets(RDD),包括其特性、创建方式(如从现有集合和外部数据源)、操作类型(transformations和actions)、缓存策略以及 Shuffle 和依赖类型。RDD是Spark的核心数据抽象,支持只读、分区和并行操作,通过血统关系实现容错。理解RDD的宽依赖和窄依赖对于优化Spark作业至关重要。
摘要由CSDN通过智能技术生成

一、RDD简介

RDD 全称为 Resilient Distributed Datasets,是 Spark 最基本的数据抽象,它是只读的、分区记录的集合,支持并行操作,可以由外部数据集或其他 RDD 转换而来,它具有以下特性:

一个 RDD 由一个或者多个分区(Partitions)组成。对于 RDD 来说,每个分区会被一个计算任务所处理,用户可以在创建 RDD 时指定其分区个数,如果没有指定,则默认采用程序所分配到的 CPU 的核心数;

RDD 拥有一个用于计算分区的函数 compute;

RDD 会保存彼此间的依赖关系,RDD 的每次转换都会生成一个新的依赖关系,这种 RDD 之间的依赖关系就像流水线一样。在部分分区数据丢失后,可以通过这种依赖关系重新计算丢失的分区数据,而不是对 RDD 的所有分区进行重新计算;

Key-Value 型的 RDD 还拥有 Partitioner(分区器),用于决定数据被存储在哪个分区中,目前 Spark 中支持 HashPartitioner(按照哈希分区) 和 RangeParationer(按照范围进行分区);

一个优先位置列表 (可选),用于存储每个分区的优先位置 (prefered location)。对于一个 HDFS 文件来说,这个列表保存的就是每个分区所在的块的位置,按照“移动数据不如移动计算“的理念,Spark 在进行任务调度的时候,会尽可能的将计算任务分配到其所要处理数据块的存储位置。

RDD[T] 抽象类的部分相关代码如下:

// 由子类实现以计算给定分区

def compute(split: Partition, context: TaskContext): Iterator[T]

// 获取所有分区

protected def getPartitions: Array[Partition]

// 获取所有依赖关系

protected def getDependencies: Seq[Dependency[_]] = deps

// 获取优先位置列表

protected def getPreferredLocations(split: Partition): Seq[String] = Nil

// 分区器 由子类重写以指定它们的分区方式

@transient val partitioner: Option[Partitioner] = None

二、创建RDD

RDD 有两种创建方式,分别介绍如下:

2.1 由现有集合创建

这里使用 spark-

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值