当前位置: 首页 > news >正文

RDD的基本概念及创建方式

(一RDD基本概念

Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。

先来看看这三个单词的含义:

- Dataset: 一个数据集合,用来存放数据的。之前我们学习的Scala中,Array, Set等也叫数据集。

- Distributed: 分布式存储的,表示数据是存放在不同的机器上的。这就和我们前面学习数据结构就不同了。

- Resilient: 数据可以保存在内存或者磁盘中。

然后,我们在看看它的定义中的一些关键字:

不可变的:immutable。类比理解scala中的不可变集合或者是使用val修饰的变量。

可分区的:集合的数据课划分成为很多部分,每部分称为分区:Partition

并行计算:集合中的数据可以被并行的计算处理,每个分区数据被一个Task任务处理。

(二RDD创建方式

1. 从 Hadoop 支持的文件系统中创建

  • 原理:Spark 可以直接从 Hadoop 支持的文件系统(如 HDFS、S3、本地文件系统等)中加载数据创建 RDD。

  • 示例代码

    scala

    复制

    val sc = new SparkContext("local", "ReadFileExample")
    val fileRDD = sc.textFile("hdfs://path/to/your/file.txt")
  • 说明textFile 方法可以读取文本文件,每行数据作为一个元素存储到 RDD 中。对于其他格式的文件(如 JSON、CSV、Parquet 等),Spark 也提供了相应的读取方法。

2. 从集合中创建

  • 原理:通过将内存中的集合数据并行化为 RDD。

  • 示例代码

    scala

    复制

    val sc = new SparkContext("local", "ParallelizeExample")
    val data = Array(1, 2, 3, 4, 5)
    val parallelizedRDD = sc.parallelize(data, 2) // 第二个参数表示分区数
  • 说明parallelize 方法将本地集合数据转换为 RDD,并可以指定分区数。分区数决定了数据在集群中的分布情况。

3. 通过其他 RDD 的转换操作创建

  • 原理:通过对已有 RDD 进行转换操作(如 mapfilterflatMap 等)来生成新的 RDD。

  • 示例代码

    scala

    复制

    val sc = new SparkContext("local", "TransformationExample")
    val fileRDD = sc.textFile("hdfs://path/to/your/file.txt")
    val wordsRDD = fileRDD.flatMap(line => line.split(" "))
    val wordCountRDD = wordsRDD.map(word => (word, 1)).reduceByKey(_ + _)
  • 说明fileRDD 是从文件中创建的 RDD,通过 flatMapmapreduceByKey 等转换操作,生成了新的 RDD(wordsRDDwordCountRDD)。

总结

  • 从文件系统中创建:适用于从外部存储加载数据。

  • 从集合中创建:适用于将内存中的数据并行化为 RDD。

  • 通过转换操作创建:是最常见的创建方式,通过对已有 RDD 进行转换操作生成新的 RDD,支持各种复杂的数据处理逻辑。

这三种方式满足了不同场景下的数据处理需求,是 Spark 编程中非常重要的基础内容。

相关文章:

  • 【swagger的部署和使用】
  • 【Prompt工程—文生图】案例大全
  • 常见的卷积神经网络列举
  • [Token]What Kind of Visual Tokens Do We Need? AAAI2025
  • 搭建spark伪分布集群
  • spark行动算子
  • MCP Client适配DeepSeek
  • 时间序列数据集构建方案Pytorch
  • Android学习总结之网络篇补充
  • ACE-Step:扩散自编码文生音乐基座模型快速了解
  • ActiveMQ 源码剖析:消息存储与通信协议实现(二)
  • 使用 Couchbase Analytics Service 的典型步骤
  • [GESP202406 七级] 黑白翻转
  • FAISS(Facebook AI Similarity Search)
  • 单片机-STM32部分:6、不同编程方式-寄存器、标准库、HAL库、LL库
  • Scrapy框架之Scrapyd部署及Gerapy分布式爬虫管理框架的使用
  • MCU缓存架构设计与优化策略
  • MySQL关于锁的面试题
  • 【详细教程】ROC曲线的计算方式与绘制方法详细介绍
  • 基于SeaFormer的YOLOv8性能提升策略—轻量高效注意力模块Sea_AttentionBlock在语义分割中的应用研究
  • 《瞭望》周刊社原总编辑、党委书记姬斌逝世,享年67岁
  • 体坛联播|穆勒主场完成拜仁谢幕战,山西车队再登环塔拉力赛
  • 刘元春在《光明日报》撰文:以法治护航民营经济高质量发展
  • 构筑高地共伴成长,第六届上海创新创业青年50人论坛在沪举行
  • 罕见沙尘再度入川,官方:沙尘传输高度达到平流层,远超以往
  • 援藏博士张兴堂已任西藏农牧学院党委书记、副校长