Spark-RDD详解

这篇具有很好参考价值的文章主要介绍了Spark-RDD详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SPARK–RDD

1、RDD的介绍

  • RDD 弹性分布式数据集合
    • 是Spark中的一种数据类型,管理spark的内存数据 [1,2,3,4]
      • spark中还有dataframe,dataset类型
      • 拓展:开发中可以通过类的形式自定以数据类型
      • 同时还提供各种计算方法
  • 弹性
    • 可以对海量数据根据需求分成多份(分区),每一份数据会有对应的task线程执行计算
    • [1,2,3,4,5,6]
      • [[1,2],[3,4],[5,6]]
  • 分布式
    • 利用集群中多台机器资源进行计算
  • 数据集合
    • 规定数据形式 类似Python中的列表 []

2、RDD的特性

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

3、创建RDD数据

将需要计算的数据转为rdd的数据,就可以利用spark的内存计算方法进行分布式计算操作,这些计算方法就是有rdd提供的
rdd数据的转发方法是有sparkcontext提供的,所以需要先生成sparkcontext,
SparkContext称为Spark的入口类

3.1、Python数据转化为rdd

只要是能被遍历的,都能转化为RDD数据

# 导入sparkcontext
from pyspark import SparkContext

# 创建SparkContext对象
sc = SparkContext()

# 将Python数据转为rdd
# data_int = 10  # 数值类型不能转化rdd
# 能for循环遍历的数据都能转为rdd
data_str = 'abc'
data_list = [1, 2, 3, 4]
data_dict = {'a': 1, 'b': 2}
data_set = {1, 2, 3, 4}
data_tuple = (1, 2, 3, 4)
rdd = sc.parallelize(data_tuple)
# rdd的数据输出展示
# 获取所有rdd数据
res = rdd.collect()
print(res)

3.2、文件数据(hdfs)转化为rdd

8020是namenode默认的端口号

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

# 生成SparkContext类对象
sc = SparkContext()

# 读取文件数据转为rdd
rdd1  = sc.textFile('hdfs://node1:8020/data') # 8020是namenode端口号?
# 读取目录下的所有文件  简写如果报错就写全写,也就是上面的内容
rdd3 = sc.textFile('/data')
# 只读取单独文件
rdd2  = sc.textFile('/data/words.txt')

# 查看数据
res = rdd1.collect()
print(res)
res = rdd2.collect()
print(res)

3.3、rdd的分区

python数据转发的分区数指定
# RDD分区使用
# 导入sparkcontext
from pyspark import SparkContext

# 创建SparkContext对象
sc = SparkContext()

# 创建生成rdd是可以指定分区数
# Python数据转为rdd指定
# numSlices 可以指定分区数
rdd_py = sc.parallelize([1,2,3,4,5,6],numSlices=10)

# 查看rdd分区数据
res1  = rdd_py.glom().collect()
print(res1)
读取的文件数据进行分区数指定
# RDD分区使用
# 导入sparkcontext
from pyspark import SparkContext

# 创建SparkContext对象
sc = SparkContext()

# 创建生成rdd是可以指定分区数
# file文件读取数据指定分区数据
# minPartitions 指定分区
# 文件大小/分区数  = 值 -----余数
# 余数/值 * 100%=百分比    百分比大于10% 会多创建一个分区
rdd_file = sc.textFile('hdfs://node1:8020/data',minPartitions=1)
# 在spark并行度部分会讲解如何根据资源设置分区数

# rdd计算

# 查看rdd分区数据

res2  = rdd_file.glom().collect()
print(res2)
3.3.3、小文件数据读取

一个分区对应一个task线程,当小文件过多时,会占用大量的线程,造成资源浪费

使用wholeTextFiles方法可以解决
该方法会现将读取到的数据合并在一起,然后重新进行分区

# 导入sparkcontext
from pyspark import SparkContext

# 创建SparkContext对象
sc = SparkContext(master='yarn')
# rdd = sc.textFile('hdfs://node1:8020/data')
# rdd计算
# wholeTextFiles 会合并小文件数据
# minPartitions 指定分区数
rdd_mini = sc.wholeTextFiles('hdfs://node1:8020/data',minPartitions=1)

# 展示数据
# res1 = rdd.glom().collect()
# print(res1)

res2 = rdd_mini.glom().collect()
print(res2)

4、常用RDD算子

4.1、 算子(方法)介绍

rdd中封装了各种算子方便进行计算,主要分为两类文章来源地址https://www.toymoban.com/news/detail-813575.html

  • transformation
    • 转化算子 对rdd数据进行转化计算得到新的rdd ,定义了一个线程任务
  • action
    • 执行算子 触发计算任务,让计算任务进行执行,得到结果
    • 触发线程执行的

4.2、常用transformation算子

  • map
    • rdd.map(lambda 参数:参数计算)
    • 参数接受每个元素数据
  • flatMap
    • 处理的是二维嵌套列表数据 [[1,2,3],[4,5,6],[7,8,9]]
    • rdd.flatMap(lambda 参数:[参数计算])
  • fliter
    • rdd.filter(lambda 参数:参数条件过滤)
    • 条件过滤的书写和Python中if判断一样

到了这里,关于Spark-RDD详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spark-RDD的依赖

    rdd之间是有依赖关系 窄依赖 每个父RDD的一个Partition最多被子RDD的一个Partition所使用 父rdd和子rdd的分区是一对一 map flatMap fliter 宽依赖 父RDD的Partition会被多个子RDD的Partition所使用 父rdd和子rdd的分区是一对多 grouBy() grouByKey() sortBy() sortByKey() reduceBykey() distinct() rdd1 -- rdd2 --rdd3 S

    2024年01月21日
    浏览(35)
  • 大数据 - Spark系列《六》- RDD详解

    Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 大数据 - Spark系列《四》- Spark分布式运行原理-CSDN博客 大数据

    2024年02月20日
    浏览(35)
  • Spark弹性分布式数据集

    1. Spark RDD是什么 RDD(Resilient Distributed Dataset,弹性分布式数据集)是一个不可变的分布式对象集合,是Spark中最基本的数据抽象。在代码中RDD是一个抽象类,代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 每个RDD都被分为多个分区,这些分区运行在集群中

    2024年02月13日
    浏览(39)
  • 大数据学习06-Spark分布式集群部署

    配置好IP vim /etc/sysconfig/network-scripts/ifcfg-ens33 修改主机名 vi /etc/hostname 做好IP映射 vim /etc/hosts 关闭防火墙 systemctl status firewalld systemctl stop firewalld systemctl disable firewalld 配置SSH免密登录 ssh-keygen -t rsa 下载Scala安装包 配置环境变量 添加如下配置 使环境生效 验证 Spark官网 解压 上

    2024年02月10日
    浏览(46)
  • 大数据开源框架环境搭建(七)——Spark完全分布式集群的安装部署

    前言:七八九用于Spark的编程实验 大数据开源框架之基于Spark的气象数据处理与分析_木子一个Lee的博客-CSDN博客_spark舆情分析 目录 实验环境: 实验步骤: 一、解压 二、配置环境变量:  三、修改配置文件  1.修改spark-env.sh配置文件: 2.修改配置文件slaves: 3.分发配置文件:

    2024年02月11日
    浏览(35)
  • Spark第二课RDD的详解

    RDD JAVA中的IO 1.小知识点穿插 1. 装饰者设计模式 装饰者设计模式:本身功能不变,扩展功能. 举例: 数据流的读取 一层一层的包装,进而将功能进行进一步的扩展 2.sleep和wait的区别 本质区别是字体不一样,sleep斜体,wait正常 斜体是静态方法 sleep:静态方法,和对象无关 t1.sleep 当前休

    2024年02月11日
    浏览(37)
  • 云计算与大数据第16章 分布式内存计算平台Spark习题

    1、Spark是Hadoop生态(  B  )组件的替代方案。 A. Hadoop     B. MapReduce        C. Yarn             D.HDFS 2、以下(  D  )不是Spark的主要组件。 A. Driver      B. SparkContext       C. ClusterManager D. ResourceManager 3、Spark中的Executor是(  A  )。 A.执行器      B.主节

    2024年02月14日
    浏览(48)
  • 分布式计算中的大数据处理:Hadoop与Spark的性能优化

    大数据处理是现代计算机科学的一个重要领域,它涉及到处理海量数据的技术和方法。随着互联网的发展,数据的规模不断增长,传统的计算方法已经无法满足需求。因此,分布式计算技术逐渐成为了主流。 Hadoop和Spark是目前最为流行的分布式计算框架之一,它们都提供了高

    2024年01月23日
    浏览(38)
  • 数据存储和分布式计算的实际应用:如何使用Spark和Flink进行数据处理和分析

    作为一名人工智能专家,程序员和软件架构师,我经常涉及到数据处理和分析。在当前大数据和云计算的时代,分布式计算已经成为了一个重要的技术方向。Spark和Flink是当前比较流行的分布式计算框架,它们提供了强大的分布式计算和数据分析功能,为数据处理和分析提供了

    2024年02月16日
    浏览(44)
  • 【Spark分布式内存计算框架——Spark 基础环境】1. Spark框架概述

    第一章 说明 整个Spark 框架分为如下7个部分,总的来说分为Spark 基础环境、Spark 离线分析和Spark实时分析三个大的方面,如下图所示: 第一方面、Spark 基础环境 主要讲述Spark框架安装部署及开发运行,如何在本地模式和集群模式运行,使用spark-shell及IDEA开发应用程序,测试及

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包