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

server/2024/10/9 13:05:34/

文章目录

  • 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支持的开发语言有:

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

python">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

在这里插入图片描述

python">#读取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数据转发的分区数指定

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方法可以解决
该方法会现将读取到的数据合并在一起,然后重新进行分区。

python"># 小文件读取
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.ppmy.cn/server/129279.html

相关文章

Concurrently 一键启动客户端和服务器

目录 简介 安装 使用场景 同时运行多个 npm scripts 顺序运行 npm scripts 运行命令和 npm scripts 传递环境变量和输入 前缀日志 案例 简介 concurrently 是一个运行并发任务的工具库,可以帮助我们在 Node.js 中轻松管理多个异步任务。 安装 使用 npm 安装 concur…

互斥锁、原子锁、自旋锁

多线程编程中,锁是一种同步机制,用于控制多个线程对共享资源的访问。互斥锁(Mutex)、原子锁、自旋锁(Spinlock)是常见的锁类型,它们有各自的特点和用途: 互斥锁(Mutex&am…

【HTTPS】深入解析 https

我的主页:2的n次方_ 1. 背景介绍 在使用 http 协议的时候是不安全的,可能会出现运营商劫持等安全问题,运营商通过劫持 http 流量,篡改返回的网页内容,例如广告业务,可能会通过 Referer 字段 来统计是…

巧用armbian定时任务控制开发板LED的亮灭

新买了个瑞莎 3E 开发板,号称最小SBC,到了之后简直玩开了花,各种折腾后 安装好armbian系统,各种调优。 不太满意的地方:由于板子太小的原因,导致两个USBTYPEC的接口距离很近,所以买的OTG转接口如果有点宽的话 会显得特别拥挤。 还有就是每天晚上天黑了之后,卧室…

深度学习之贝叶斯分类器

贝叶斯分类器 1 图解极大似然估计 极大似然估计的原理,用一张图片来说明,如下图所示: ​ 例:有两个外形完全相同的箱子,1号箱有99只白球,1只黑球;2号箱有1只白球,99只黑球。在一次…

蓝牙模块(BT04/HC05)

目录 一、介绍 二、模块原理 1.原理图与外形尺寸 2.引脚描述 3.蓝牙模块基础AT指令介绍 三、程序设计 usart3.h文件 usart3.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 BT04A是一款蓝牙低功耗(Bluetooth Low Energy, BLE)模块&…

C/C++复习(一)

1.sizeof 关于sizeof我们是经常使用的,所以使用方法就不需要提及了,这里我们需要注意的是,sizeof 后面如果是表达式可以不用括号,并且sizeof实际上不参与运算,返回的是内容的类型大小(size_t类型&#xff0…

一次金融APP的解密历程

声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。 前言: 客户仅提供官网下载地址给我们测试。但是由于官网的版本不是最新的,APP会强制你升级。而…