RDD的介绍、RDD的特点、创建RDD数据

news2025/1/16 5:40:04

文章目录

  • 1. RDD介绍
    • 1.1 Spark开发方式
      • 1.1.1 交互式开发
      • 1.1.2 脚本式开发
    • 1.2 Spark支持的开发语言
    • 1.3 RDD介绍
  • 2. RDD特性
  • 3. 创建RDD数据
    • 3.1 Python数据转化为RDD
    • 3.2 文件数据HDFS转化为RDD
    • 3.3 RDD分区
    • 3.4 小文件数据读取

1. RDD介绍

1.1 Spark开发方式

1.1.1 交互式开发

  • 通过不同的命令进入不同的语言交互开发界面。
  • 代码不能持久保存,一般用来测试某个代码的执行是否正确。

在 Spark 中,交互式开发主要通过 Spark Shell 来实现。

  • 对于 Scala 版本的 Spark Shell
    在命令行中输入spark-shell命令即可启动。启动后,可以在命令提示符下输入 Scala 代码来操作 Spark。
    在这里插入图片描述
  • 对于 Python 版本的 Spark Shell(PySpark):
    使用pyspark命令启动。在 PySpark 中,可以使用 Python 语言进行 Spark 开发。
    在这里插入图片描述
    注意:在spark shell中,可以使用:q或者:quit退出。

1.1.2 脚本式开发

  • 将编写代码保存在文件,对代码文件进行运行实现spark的计算。
  • 使用IDE工具进行代码文件编写

1.2 Spark支持的开发语言

Spark支持的开发语言有:

  • java
  • scala
  • python
  • R
  • SQL

1.3 RDD介绍

在 Apache Spark 中,弹性分布式数据集(Resilient Distributed Dataset,简称 RDD)是其核心概念之一。
RDD是spark的一种数据模型(规定数据的存储结构和计算方法),RDD将数据分布式存储在不同服务器内存上,通过RDD共享不同服务器的内存数据,所以Spark是基于内存进行分布式数据计算的框架。
它具有以下主要特点:

  1. 弹性:
    • 可以根据计算的需求将数据进行分区拆分,本质就是将数据分成多份,每份数据称为一个分区。
    • 每个分区都会对应一个线程任务执行计算。
  2. 分布式:数据分布在集群中的多个节点上,可以并行处理。
  3. 不可变:一旦创建,RDD 的内容不能被修改,只能通过转换操作生成新的 RDD。

2. RDD特性

  • 分区
    • 可以将计算的海量数据分成多份,需要分成多少分区可以通过方法指定。
    • 每个分区都可以对应一个task线程执行计算
  • `只读``
    • RDD中的数据不能直接修改,需要通过方法计算后得到一个新的RDD。
    • RDD本身存储的数据只能读取。
  • 依赖
    • RDD之间是有依赖关系的。
    • 新的RDD是通过旧的RDD计算得到的。
  • 缓存
    • 可以将计算中的结果缓存起来,如果后续计算错误时,可以从缓存位置重新计算。
    • 将数据存储在内存或本地磁盘
    • 作用是容错
    • 缓存在执行计算任务程序结束后会释放删除。
  • checkpoint
    • 作用和缓存一样
    • checkpoint可以将数据存储在分布式存储系统中,比如HDFS。

3. 创建RDD数据

将需要计算的数据转为rdd的数据,就可以利用spark的内存计算方法进行分布式计算操作,这些计算方法就是有rdd提供的
rdd数据的转化方法是有sparkcontext提供的,所以需要先生成sparkcontext,sparkcontext中还包含资源申请和任务划分功能
SparkContext称为Spark的入口类

3.1 Python数据转化为RDD

将python数据转为RDD

data = [1,2,3,4]

# 将python的列表数据转为RDD,需要使用pyspark中的sparkcontext类,该类中封装转化方法
from pyspark import SparkContext

# 1.先将类生成对象
sc = SparkContext()
# 2. 使用对象方法将python的列表转为RDD
rdd = sc.parallelize(data)

#3. 使用rdd提供的方法进行分布式聚合计算
res = rdd.reduce(lambda x, y: x + y)
print(res)

结果输出:
在这里插入图片描述

3.2 文件数据HDFS转化为RDD

在这里插入图片描述

#读取hdfs文件数据转为rdd
from pyspark import SparkContext\

# 1.创建对象
sc = SparkContext()

#2.读取hdfs的文件数据
# 指定读取的文件路径
rdd1 = sc.textFile('hdfs://node1:8020/data/stu.txt')
# 指定读取的目录路径
rdd2 = sc.textFile('hdfs://node1:8020/data')

# 3. 查看rdd中的读取数据
res1 = rdd1.collect()
print(res1)

res2 = rdd2.collect()
print(res2)

结果输出:
在这里插入图片描述

3.3 RDD分区

Python数据转发的分区数指定

#  RDD的分区指定
from pyspark import SparkContext
sc = SparkContext()
data = [1,2,3,4,5,6,7,8]

#转化RDD时指定分区数
rdd = sc.parallelize(data,numSlices=8)

#查看分区后的数据形式 glom()查看分区形式
res = rdd.glom().collect()
print(res)

#读取的文件指定分区数
# 文件在进行分区时,有时候会多一个空分区
# 文件大小 % 分区数 = 值 -- 余数
# 余数/值 占比 超过10%额外会创建一个分区
rdd2 = sc.textFile("hdfs://node1:8020/data/stu.txt",minPartitions=2)
res2 = rdd2.glom().collect()
print(res2)

结果输出:
在这里插入图片描述

3.4 小文件数据读取

在一个目录下,有多个文件,如果文件的大小不够一个块的大小,一个文件就对应一个分区,文件超过一个块,那就一个block(128M)块对应一个分区。
目录下都是小文件,那么读取目录下的文件数据,会对应很多个分区。


一个分区对应一个task线程,当小文件过多时,会占用大量的线程,造成资源浪费。
使用wholeTextFiles方法可以解决
该方法会现将读取到的数据合并在一起,然后重新进行分区。

# 小文件读取
from pyspark import SparkContext
# 1-创建对象
sc = SparkContext()

# 2-读取hdfs的文件数据
# 指定读取目录,可以读取目录下的所有文件数据
rdd2 = sc.textFile('hdfs://node1:8020/data')

# 小文件的数据读取 将小文件数据进行合并后按照指定的分区数进行分区
rdd3 = sc.wholeTextFiles('hdfs://node1:8020/data',minPartitions=2)
# 3-查看rdd中的读取的数据
res = rdd2.glom().collect()
print(res)

res = rdd3.glom().collect()
print(res)

结果输出:
在这里插入图片描述

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

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

相关文章

【LeetCode】动态规划—712. 两个字符串的最小ASCII删除和(附完整Python/C++代码)

动态规划—712. 两个字符串的最小ASCII删除和 前言题目描述基本思路1. 问题定义2. 理解问题和递推关系3. 解决方法3.1 动态规划方法3.2 空间优化的动态规划 4. 进一步优化5. 小总结 代码实现PythonPython3代码实现Python 代码解释 CC代码实现C 代码解释 总结: 前言 在字符串处…

【已解决】endnote只显示十条文献/licence失效/this license has been suspended

问题:打开endnote后弹窗显示 Were sorry,this license has been suspended due to ...... 关闭弹窗发现只剩10条文献显示了 解决方法: ①关闭杀毒软件 ②找到endnote源文件夹下的License.dat文件(找不到的话直接在“此电脑”中搜索&#x…

倒计时3天!飞凌嵌入式邀您共聚第90届CMEF

10月12日~15日,第90届中国国际医疗器械博览会(CMEF)即将在深圳国际会展中心(宝安)隆重举行,4000品牌企业将携数万款产品集中亮相,为全球健康产业带来探析前沿、洞见未来的医疗盛宴。 飞凌嵌入式作为业界领先的嵌入式解决方案提供商&#xff…

七、InnoDB数据存储结构

文章目录 1. 数据库的存储结构:页1.1 磁盘与内存交互基本单位:页1.2 页结构概述1.3 页的大小1.4 页的上层结构2. 页的内部结构2.1 第1部分:File Header(文件头部)和 File Trailer(文件尾部)2.1.1 File Header(文件头部)2.1.2 File tRAILER(文件尾部)2.2 第2部分:Fr…

电商价格监测的创新之路

在当今数字化高速发展的时代,电商如汹涌的浪潮席卷了商业的每一个角落。品牌们在这片广阔的电商海洋中奋力前行,而价格监测则成为了他们手中至关重要的罗盘。 力维网络以其专业的价格监测服务,为品牌在电商之海的航行点亮了一盏明灯。然而&a…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第二十一章 makefile基本语法(下)

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

韦东山老师linux快速入门otg检测不到方案总结

我是如何解决, 第二节, otg 串口检测不到的, 开发手册链接: https://wwyz.lanzoul.com/iF1TA2c21uoh 我首先按照评论区, 老师说的, 根据完全开发手册, 搜索otg, 然后找到老师当时 烧写系统的时候, 利用usb启动, 然后otg链接, 然后 安装了两个驱动, 往后翻, 就可以翻到 然后重…

多系统数据交换与共享技术方案(医疗行业为例,Doc原件)

目录 1 方案概述 1.1 背景 1.2 参考规范 2 需求分析 2.1 交换内容 2.2 功能需求 1) 消息传输 2) 数据整合 3) 服务集成 4) 流程整合 5) 管理功能 3 总体建设方案 3.1 实现思路 3.1.1 交换方案比选 3.1.2 技术优势 3.2 总体架构 3.3 数据交换与共享基本模型 3.…

ATAM需求说明-系统架构师(七十六)

1体系结构权衡分析法ATAM(Architecture Trade Off Analyzer Method)是一种常见的结构权衡分析法,该框架主要关注系统的(),针对性能、安全性、可用性和可修改性,在系统开发前进行分析、评价和这种。 A 需求说明 B 架构…

大型生物制药企业如何实现安全又高效地跨网域数据传输?

大型生物制药企业由于组织结构庞大、业务覆盖研发、生产及销售,因此内部会再细分为多个管理单位,包括研发部门、生产部门、质量控制部门、供应链管理部门及营销部和日常业务支撑部门等。在物理区域划分上,大型生物制药企业会设立实验室、研发…

Java—逻辑控制与输入输出

各位看官:如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论,感谢您的支持!!! 一.顺序结构: 我每天起床,躺在床上玩手机,然后吃中午饭,睡…

[C++ 核心编程]笔记 2 栈区和堆区

栈区: 由编译器自动分配释放&#xff0c;存放函数的参数值,同部变量等 注意事项&#xff1a;不要返回局部变量的地址&#xff0c;栈区开辟的数据由编译器自动释放 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std;//栈区数据注意事项 不要…

【架构师】系统架构相关知识

本文仅做技术交流&#xff0c;转载请注明来源&#xff0c;切勿商用。 参考&#xff1a;系统架构师考纲及教材 1、系统架构的概念 架构是一种表达&#xff0c;而非可运行的软件。 1&#xff09;分析设计在满足所规定的需求方面的有效性 2&#xff09;在设计变更相对容易的阶段…

【读书笔记·VLSI电路设计方法解密】问题4:今天的设计环境中使用的主要工艺技术是什么

主流的工艺技术是互补金属氧化物半导体&#xff08;CMOS&#xff09;技术。其他技术还包括双极性、双极CMOS&#xff08;biCMOS&#xff09;、绝缘体上硅&#xff08;SOI&#xff09;和砷化镓&#xff08;GaAs&#xff09;。 在CMOS技术中&#xff0c;"互补对称"指的…

Android开发:日志功能备忘

临时记一下吧&#xff0c;以后就直接复制粘贴这里面的好了。 实现一个日志记录程序的运行状态&#xff0c;并且带上时间信息&#xff0c;可以写一个类灵活调用。 MyLog.java package com.example.networkaccessrestrictions;import static android.content.ContentValues.TAG;i…

目标检测实战教程Day1(原创)

原创不易&#xff0c;转载请标明本文地址 目标检测一直是计算机视觉领域的核心问题之一&#xff0c;它就像是让计算机拥有了一双“鹰眼”&#xff0c;能在复杂的图像中迅速锁定和识别出各种有趣的目标&#xff0c;比如人、汽车、动物或者任何其他特定物体。在这一章&#xff0c…

【汇编语言】寄存器(CPU工作原理)(五)—— 段寄存器以及CS和IP

文章目录 前言1. 段寄存器2. CS 和 IP结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言可以深入理解计算机底层工作原理&#xff0c;提升代码…

产品推介——AC晶体管光耦KL814

KL814产品系列&#xff0c;由苏州晶台光电有限公司研发生产的一款采用交流输入的晶体管光耦。它结合了两个反向并联的红外发射二极管与一个光电晶体管&#xff0c;构成了一个高效且稳定的光电耦合器。 产品特点Product features ◆交流输入响应 ◆电流传输比 (CTR&#xff1…

vs2022调试cmake工程时,添加命令行参数

第一步&#xff1a; 第二步&#xff1a;在launch.vs.json文件里添加 至此可以在调试当前工程时&#xff0c;可以传入命令行参数。

十款超好用的图纸加密软件推荐!2024企业图纸加密最佳选择!

在企业日常工作中&#xff0c;尤其是制造业、建筑业和设计行业&#xff0c;图纸安全至关重要。图纸泄露可能导致专利技术被盗、商业机密外泄&#xff0c;给公司带来不可估量的损失。为了确保图纸的安全性&#xff0c;图纸加密软件是必不可少的工具。以下是2024年十款超好用的图…