什么是Spark RDD?(RDD的介绍与创建)

什么是Spark RDD?(RDD的介绍与创建)

  • 一、RDD介绍
    • 1、特点
    • 2、RDD的存储和指向
    • 3、RDD与DAG
    • 4、RDD的特性
    • 5、RDD分区
    • 6、RDD操作类型
  • 二、RDD创建
    • 1、引入必要的 Spark 库
    • 2、配置 Spark
    • 3、RDD创建
    • 4、示例代码

一、RDD介绍

RDD: 弹性分布式数据集(Resilient Distributed Datasets)
核心概念:Spark的核心数据抽象。
通过对RDD的理解和使用,可以在分布式计算环境中高效地处理和计算大规模数据

1、特点

  • 分布式数据集:RDD是只读的、分区记录的集合,每个分区分布在集群的不同节点上。RDD并不存储真正的数据,只是对数据和操作的描述。
  • 弹性:默认存放在内存中,当内存不足,Spark自动将RDD写入磁盘。
  • 容错性:根据数据血统,可以自动从节点失败中恢复分区。

2、RDD的存储和指向

  • 存储在 (HIVE)HDFS、Cassandra、HBase等
  • 缓存(内存、内存+磁盘、仅磁盘等)
  • 或在故障或缓存收回时重新计算其他RDD分区中的数据

3、RDD与DAG

  • DAG(有向无环图):反映了RDD之间的依赖关系。

  • Stage:RDD和DAG是Spark提供的核心抽象,RDD的操作会生成DAG,DAG会进一步被划分为多个Stage,每个Stage包含多个Task。

    在这里插入图片描述

4、RDD的特性

  1. 分区(Partition):每个任务处理一个分区。
  2. 计算函数(compute):每个分区上都有compute函数,计算该分区中的数据。
  3. 依赖关系:RDD之间有一系列的依赖。
  4. 分区器(Partitioner)
    • 决定数据(key-value)分配至哪个分区。
    • 常见的分区器有Hash Partition和Range Partition。
  5. 优先位置列表:将计算任务分派到其所在处理数据块的存储位置。

5、RDD分区

  • 分区(Partition):是RDD被拆分并发送到节点的不同块之一。
  • 分区越多,并行性越强:我们拥有的分区越多,得到的并行性就越强。
  • 每个分区都是被分发到不同Worker Node的候选者。
  • 每个分区对应一个Task。

6、RDD操作类型

  • Transformation(转换操作)
    • Lazy操作:不会立即执行,只是记录操作,当触发Action时才会真正执行。
    • 例如:map、filter、flatMap等。
  • Actions(动作操作)
    • Non-lazy操作:立即执行,会触发所有相关Transformation的计算。
    • 例如:count、collect、saveAsTextFile等。

二、RDD创建

1、引入必要的 Spark 库

这里用的是scala语言的maven项目

<!-- 导入 spark-core jar 包 -->
<dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.1.2</version>
</dependency>
// 引入 Spark 库
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

2、配置 Spark

setMaster (设置运行模式) 方法的可选方案:

  1. local: 在单核上运行
  2. local[N]: 在指定数量的 N 个核上运行,如 “local[4]”
  3. local[*]: 使用所有可用的核
  4. spark://HOST:PORT: 连接到指定的 Spark standalone cluster
  5. yarn: 连接到 YARN 集群
  6. mesos://HOST:PORT: 连接到 Mesos 集群
val conf = new SparkConf().setAppName("Spark RDD Example")// 设置应用程序名称.setMaster("local[*]")			// 设置运行模式
val sc = new SparkContext(conf)
// sc.setLogLevel()	// 设置日志显示级别

3、RDD创建

  • 从集合创建 RDD,指定分区数

    val rdd: RDD[T] = sc.parallelize(seq: Seq[T], numSlices: Int) // ✔
    val rdd: RDD[T] = sc.makeRDD(seq: Seq[T], numSlices: Int)     // 调用了 parallelize
    
  • 从外部数据源创建 RDD,指定最小分区数

    从文件系统中的单个文件创建 RDD

    • 本地文件系统使用 file:/// 前缀
    • Hadoop 文件系统使用 hdfs:// 前缀
    // 从文件系统创建 RDD,可以通过 minPartitions 指定分区数
    val textRDD: RDD[String] = sc.textFile(filePath, minPartitions:Int)	// 从文件系统创建 RDD
    val rdd: RDD[(String, String)] = sc.wholeTextFiles(dir: String, minPartitions: Int) // 从目录创建 RDD
    

4、示例代码

附加单词次数统计

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD
object SparkRDDExample {def main(args: Array[String]): Unit = {// 配置 Spark  val conf = new SparkConf().setAppName("Spark RDD Example").setMaster("local[*]")val sc = new SparkContext(conf)// 从集合创建 RDD,指定分区数val data = Seq(1, 2, 3, 4, 5)val rdd: RDD[Int] = sc.parallelize(data, numSlices = 2)rdd.collect().foreach(println)// 从外部数据源创建 RDD,指定最小分区数val filePath = "file:///F:\\sparkRDD\\spark01\\data\\story.txt"val textRDD: RDD[String] = sc.textFile(filePath, minPartitions = 4)textRDD.collect().foreach(println)// 将文本文件中的每行数据拆分为单词并统计每个单词的出现次数val wordCountRDD = textRDD.mapPartitions {_.flatMap {_.split("[^a-zA-Z]+") // 按非字母字符拆分字符串.map(word => (word, 1)) // 将每个单词转换为 (单词, 1) 的元组}}.reduceByKey(_+_)// 显示单词计数结果println("Word count from textFile:")wordCountRDD.collect().foreach(println)// 停止 SparkContextsc.stop()}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/22983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ARMv7-A】——CP15 协处理器

文章目录 CP15 协处理器指令格式MCR 示例MRC 示例寄存器C0 identification registersC1 system control registersC2 memory protection and control registersC3 memory protection and control registersC4 Not usedC5 Memory system fault registers

【PCB]射频电路pcb设计

学习改变命运&#xff0c;技能成就未来&#xff01;❤~~ 1射频信号的基础知识及工作原理介绍 射频的基础知识介绍 2射频板PCB的布局要求 3射频板布局要求 4屏蔽帐设计 5射频板的层叠阻抗设计 6射频板的PCB布线原则 7射频板的PCB布线要求 8射频板的设计实战

鸿蒙Ability Kit(程序框架服务)【应用上下文Context】

应用上下文Context 概述 [Context]是应用中对象的上下文&#xff0c;其提供了应用的一些基础信息&#xff0c;例如resourceManager&#xff08;资源管理&#xff09;、applicationInfo&#xff08;当前应用信息&#xff09;、dir&#xff08;应用文件路径&#xff09;、area&…

Vue 实现的精彩动画效果

在 Vue 开发中&#xff0c;我们可以利用<transition>组件来打造各种令人惊艳的动画效果。下面来详细看看这些有趣的动画效果及其实现代码。 一、缩放类效果 zoom-in&#xff08;整体放大进入&#xff09; <template><div><button click"isShow ! …

10个令人惊叹的Python自动化脚本

大家好&#xff0c;Python凭借其简单和通用性&#xff0c;能够为解决每天重复同样的工作提供最佳方案。本文将介绍10个Python自动化脚本&#xff0c;可以帮助自动化完成任务&#xff0c;提高工作效率&#xff0c;它们可以成为项目运行中的便捷工具&#xff0c;可以收藏这些脚本…

AI办公自动化:用kimi批量提取音频中的标题并重命名

很多音频文件&#xff0c;文件名很乱&#xff0c;需要根据音频信息中的标题聪明吗 在kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;一步步的思考&#xff0c;完成以下脚本的撰写&#xff1a; 打开文件夹&#xff1a;E:\有声\a16z播客 读取里面所有的mp3格…

ARM的工作模式

ARM的几种工作模式 User : 非特权模式&#xff0c;大部分任务执行在这种模式 FIQ : 当一个高优先级&#xff08;fast) 中断产生时将会进入这种模式IRQ : 当一个低优先级&#xff08;normal) 中断产生时将会进入这种模式 Supervisor&#xff08;SVC&#xff09; : 当复位或软中断…

GPT-4 Turbo 和 GPT-4 的区别

引言 人工智能&#xff08;AI&#xff09;领域的发展日新月异&#xff0c;OpenAI 的 GPT 系列模型一直是这一领域的佼佼者。GPT-4 和 GPT-4 Turbo 是目前市场上最先进的语言模型之一。本文将详细探讨 GPT-4 和 GPT-4 Turbo 之间的区别&#xff0c;以帮助用户更好地理解和选择适…

vue3中 window绑定scroll事件滚动页面获取不到e.target.scrollTop

遇到的问题 vue3项目 onMounted(() > {window.addEventListener(scroll, (e) > {console.log(e.target.scrollTop)}) })想要监听页面中的滚动&#xff0c;然后获取滚动距离实现一些功能&#xff0c;发现event参数中获取不到e.target.scrollTop&#xff08;印象中以前使…

React项目目录结构与组件基础结构

在React中开发项目并扩展组件时&#xff0c;一个清晰合理的目录结构是至关重要的。它不仅可以帮助你更好地组织代码&#xff0c;还能提高项目的可维护性和扩展性。下面是一个基本的React项目目录结构大纲&#xff0c;你可以根据自己的项目需求进行调整&#xff1a; my-app/ ├…

python 编写登录界面

import tkinter as tk from tkinter import messagebox def on_login(): username username_entry.get() password password_entry.get() # 这里只是模拟验证&#xff0c;实际中应从数据库验证 if username "admin" and password "password&quo…

【数据库初阶】SQL--DML

文章目录 DML1. 基本介绍2. 添加数据3. 修改数据4. 删除数据 更多数据库MySQL系统内容就在以下专栏&#xff1a; 专栏链接&#xff1a;数据库MySQL DML 1. 基本介绍 DML英文全称是Data Mainipulation Language&#xff08;数据操作语言&#xff09;&#xff0c;用来对数据库中…

面试被问准备多久要孩子?这样回答

听说有人面试被问到多久要孩子的问题&#xff0c;当时觉得很尴尬&#xff0c;不知如何回答&#xff0c;怕回答的不好不被录用&#xff0c;其实你可以这样回答&#xff0c;让面试官心满意足。 A 面试官&#xff1a;结婚了吗&#xff1f; 我&#xff1a;结婚了 面试官&#xff1…

Vuforia AR篇(六)— Mid Air 半空识别

目录 前言一、什么是Mid Air&#xff1f;二、使用步骤三、示例代码四、效果 前言 增强现实&#xff08;AR&#xff09;技术正在改变我们与数字世界的互动方式。Vuforia作为先进的AR开发平台&#xff0c;提供了多种工具来创造引人入胜的AR体验。其中&#xff0c;Mid Air功能以其…

使用【AliceCarousel】实现轮播功能

无论是在react还是vue项目中&#xff0c;我们都可能会遇到需要轮播的场景&#xff0c;在实习中&#xff0c;遇到了实现组件轮播的需求&#xff0c;下面进行简要记录。 1. 安装AliceCarousel npm install react-alice-carousel --save 2. 引入AliceCarousel组件 import Reac…

俄罗斯人有哪些常用的口头禅,柯桥零基础俄语培训

Хватит! 够了&#xff01; -Хватит, не стоит больше шуметь! 够了, 不要再吵了! -Это тебя не касается! 这与你无关&#xff01; Блин! 靠&#xff01; Блин这个词绝对是俄罗斯人最爱用的口语表达之一&#xff0c;…

Velox Types介绍和源码解析

Velox 支持 scalar&#xff08;有大小没有方向&#xff09;类型和复杂类型。标量类型分为一组固定的物理类型和一组可扩展的逻辑类型。物理类型决定数据在内存中的布局。逻辑类型向物理类型添加附加语义。 Phsical Types 每个物理类型都是用c type实现的&#xff0c;不会存储…

右键Open with VSCode打开Vue3项目

之前看到一些同事能够对项目根目录进行右键打开项目到 Microsoft VS Code &#xff0c;当时觉得挺不错的&#xff0c;于是乎今天自己折腾了一遍。 目录 1、创建vue3项目 2、更改注册表 # 打开注册表编辑器&#xff08;Registry Editor&#xff09; # 导航到以下注册表路径 …

前端_防抖节流

目录 一、防抖&#xff08;debounce&#xff09; 1.使用场景 2.js代码实现 3.lodash工具库使用 二、节流&#xff08;throttle&#xff09; 1.使用场景 2.js代码实现 3.lodash工具库使用 前端做项目&#xff0c;为了防止用户因为网络不好数据响应慢&#xff0c;导致进行…

信不信,马上教会你Purple Pi OH开发板之ADB常用命令

开源鸿蒙硬件方案领跑者 触觉智能 本文适用于在Purple Pi OH开发板进行分区镜像烧录。触觉智能的Purple Pi OH鸿蒙开源主板&#xff0c;是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党&#xff0c;极客&#xff0c;工程师&#xff0c;极大降低了开源鸿蒙开…