当前位置: 首页 > 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 编程中非常重要的基础内容。

http://www.xdnf.cn/news/327763.html

相关文章:

  • 什么是RDD.RDD的创建方式
  • 小王包子铺的融资过程以及IPO上市过程
  • 自定义Widget开发:手势交互处理
  • cuda程序兼容性问题
  • 001 环境搭建
  • 对京东开展外卖业务的一些思考
  • 80、删除有序数组中的重复项Ⅱ
  • keil5 sprintf接口无法使用
  • 51单片机快速成长路径
  • SpringBoot记录用户操作日志
  • 紫光同创FPGA实现HSSTHP光口视频传输+图像缩放,基于Aurora 8b/10b编解码架构,提供3套PDS工程源码和技术支持
  • windows使用bat脚本激活conda环境
  • TI Code Composer Studio编译时SDK报错问题解决
  • 鸿蒙NEXT开发动画案例3
  • 写程序,统计两会政府工作报告热词频率,并生成词云
  • 2025-05-07 Unity 网络基础7——TCP异步通信
  • 卷积神经网络基础(六)
  • Python 运维脚本
  • AI系列:智能音箱技术简析
  • void*在c语言中什么意思(非常详细)
  • scanpy处理:使用自定义 python 函数读取百迈客空间转录组数据(百创智造S1000)
  • 深度学习:智能车牌识别系统(python)
  • htop筛选进程时,出现重复进程
  • 德州仪器技术干货 | 48V 集成式热插拔电子保险丝:为现代 AI 数据中心高效供电
  • Python案例实战《水果识别模型训练及调用》
  • Linux 内核学习(7) --- 字符设备驱动
  • eFish-SBC-RK3576工控板CAN接口测试操作指南
  • leetcode 3341. 到达最后一个房间的最少时间 I 中等
  • Unity_JK框架【3】 事件系统的简单使用示例
  • 169.多数元素