对SparkRDD的认识

Spark RDD 概述

RDD(Resilient Distributed Dataset)是 Spark 的核心数据结构,代表一个不可变、可分区的分布式数据集。RDD 支持并行操作,具备容错性,能够高效处理大规模数据。

RDD 的特性

  • 不可变性(Immutable):RDD 一旦创建无法修改,只能通过转换操作生成新的 RDD。
  • 分区(Partitioned):数据分布在多个节点上,每个分区可独立处理。
  • 容错性(Fault-tolerant):通过血缘关系(Lineage)记录转换过程,丢失时可重新计算恢复。
  • 延迟计算(Lazy Evaluation) :转换操作不会立即执行,需触发行动操作(如 collect())时才计算。

RDD 的创建方式

  1. 从集合创建

    使用 parallelize() 方法将本地集合转换为 RDD。

    python 复制代码
    from pyspark import SparkContext  
    sc = SparkContext("local", "RDD Example")  
    data = [1, 2, 3, 4, 5]  
    rdd = sc.parallelize(data)  
  2. 从外部存储系统加载

    通过 textFile() 从 HDFS、本地文件系统等读取数据。

    python 复制代码
    rdd = sc.textFile("hdfs://path/to/file.txt")  
  3. 从其他 RDD 转换

    通过转换操作(如 map()filter())生成新的 RDD。

    python 复制代码
    squared_rdd = rdd.map(lambda x: x * x)  

RDD 的常用操作

  1. 转换操作(Transformations)

    • map(func):对每个元素应用函数。
    • filter(func):保留满足条件的元素。
    • flatMap(func):先映射后扁平化(如拆分单词)。
    • reduceByKey(func):对键值对按键聚合。
  2. 行动操作(Actions)

    • collect():返回所有元素到驱动程序。
    • count():统计元素数量。
    • take(n):返回前 n 个元素。
    • saveAsTextFile(path):保存到文件系统。

RDD 持久化

通过 persist()cache() 将 RDD 缓存到内存或磁盘,避免重复计算。

python 复制代码
rdd.persist(StorageLevel.MEMORY_ONLY)  # 仅内存  
rdd.cache()  # 默认内存缓存  

RDD 的依赖关系

  • 窄依赖(Narrow Dependency) :每个父 RDD 分区最多被一个子分区依赖(如 map)。
  • 宽依赖(Wide Dependency) :父分区可能被多个子分区依赖(如 reduceByKey),需 Shuffle 操作。

示例:词频统计

python 复制代码
text_rdd = sc.textFile("input.txt")  
words_rdd = text_rdd.flatMap(lambda line: line.split(" "))  
word_counts = words_rdd.map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)  
word_counts.saveAsTextFile("output")  

RDD 的局限性

  • 不支持结构化数据的优化(如列式存储),需使用 DataFrame/Dataset。
  • 频繁的 Shuffle 操作可能影响性能。

通过合理设计分区和持久化策略,RDD 能够高效处理大规模分布式数据任务。

相关推荐
2501_9444241242 分钟前
Flutter for OpenHarmony游戏集合App实战之连连看路径连线
android·开发语言·前端·javascript·flutter·游戏·php
C系语言43 分钟前
python用pip生成requirements.txt
开发语言·python·pip
燃于AC之乐1 小时前
深入解剖STL Vector:从底层原理到核心接口的灵活运用
开发语言·c++·迭代器·stl·vector·源码分析·底层原理
星火开发设计8 小时前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
search78 小时前
前端设计:CRG 3--CDC error
前端
治金的blog8 小时前
vben-admin和vite,ant-design-vue的结合的联系
前端·vscode
TTGGGFF8 小时前
控制系统建模仿真(一):掌握控制系统设计的 MAD 流程与 MATLAB 基础运算
开发语言·matlab
2501_944424128 小时前
Flutter for OpenHarmony游戏集合App实战之贪吃蛇食物生成
android·开发语言·flutter·游戏·harmonyos
利刃大大9 小时前
【Vue】Vue2 和 Vue3 的区别
前端·javascript·vue.js
Lhuu(重开版9 小时前
JS:正则表达式和作用域
开发语言·javascript·正则表达式