Spark大数据处理讲课笔记3.1 掌握RDD的创建

news2024/10/5 7:16:38

文章目录

  • 零、本节学习目标
  • 一、RDD为何物
    • (一)RDD概念
    • (二)RDD示例
    • (三)RDD主要特征
  • 二、做好准备工作
    • (一)准备文件
      • 1、准备本地系统文件
      • 2、启动HDFS服务
      • 3、上传文件到HDFS
    • (二)启动Spark Shell
      • 1、启动Spark服务
      • 2、启动Spark Shell
  • 三、创建RDD
    • (一)通过并行集合创建RDD
      • 1、利用`parallelize()`方法创建RDD
      • 2、利用`makeRDD()`方法创建RDD
      • 3、简单说明
    • (二)从外部存储创建RDD
      • 1、从文件系统加载数据创建RDD
        • 课堂练习:给输出数据添加行号
      • 2、从HDFS中加载数据创建RDD
  • 四、读取文件的问题
    • (一)以集群方式启动Spark Shell
      • 1、读取本地文件
      • 2、读取HDFS文件
    • (二)以本地模式启动Spark Shell
      • 1、读取本地文件
      • 2、访问HDFS文件
    • (三)结论

零、本节学习目标

  1. 了解RDD的主要特征
  2. 掌握RDD的创建方式

一、RDD为何物

(一)RDD概念

  • Spark提供了一种对数据的核心抽象,称为弹性分布式数据集Resilient Distributed Dataset,RDD)。这个数据集的全部或部分可以缓存在内存中,并且可以在多次计算时重用。RDD其实就是一个分布在多个节点上的数据集合。RDD的弹性主要是指当内存不够时,数据可以持久化到磁盘,并且RDD具有高效的容错能力。分布式数据集是指一个数据集存储在不同的节点上,每个节点存储数据集的一部分。
  • 传统的MapReduce虽然具有自动容错、平衡负载和可拓展性的优点,但是其最大缺点是采用非循环式的数据流模型,使得在迭代计算式要进行大量的磁盘IO操作。Spark中的RDD可以很好的解决这一缺点。RDD是Spark提供的最重要的抽象概念,我们可以将RDD理解为一个分布式存储在集群中的大型数据集合,不同RDD之间可以通过转换操作形成依赖关系实现管道化,从而避免了中间结果的I/O操作,提高数据处理的速度和性能。

(二)RDD示例

  • 将数据集(hello, world, scala, spark, love, spark, happy)存储在三个节点上,节点一存储(hello, world),节点二存储(scala, spark, love),节点三存储(spark, happy),这样对三个节点的数据可以并行计算,并且三个节点的数据共同组成了一个RDD。
    在这里插入图片描述

  • 分布式数据集类似于HDFS中的文件分块,不同的块存储在不同的节点上;而并行计算类似于使用MapReduce读取HDFS中的数据并进行Map和Reduce操作。Spark则包含这两种功能,并且计算更加灵活。

  • 在编程时,可以把RDD看作是一个数据操作的基本单位,而不必关心数据的分布式特性,Spark会自动将RDD的数据分发到集群的各个节点。Spark中对数据的操作主要是对RDD的操作(创建、转化、求值)。

(三)RDD主要特征

  • RDD是不可变的,但可以将RDD转换成新的RDD进行操作。
  • RDD是可分区的。RDD由很多分区组成,每个分区对应一个Task任务来执行。
  • 对RDD进行操作,相当于对RDD的每个分区进行操作。
  • RDD拥有一系列对分区进行计算的函数,称为算子
  • RDD之间存在依赖关系,可以实现管道化,避免了中间数据的存储。

二、做好准备工作

(一)准备文件

1、准备本地系统文件

  • /home目录里创建test.txt
    在这里插入图片描述
  • 单词用空格分隔
    在这里插入图片描述

2、启动HDFS服务

  • 执行命令:start-dfs.sh
    在这里插入图片描述

3、上传文件到HDFS

  • test.txt上传到HDFS的/park目录里
    在这里插入图片描述
  • 查看文件内容
    在这里插入图片描述

(二)启动Spark Shell

1、启动Spark服务

  • 执行命令:start-all.sh
    在这里插入图片描述

2、启动Spark Shell

  • 执行命令:spark-shell(既可以读取本地文件,也可以读取HDFS文件)
    在这里插入图片描述

  • 查看Spark Shell的WebUI界面
    在这里插入图片描述

  • 查看执行器
    在这里插入图片描述

三、创建RDD

  • RDD中的数据来源可以是程序中的对象集合,也可以是外部存储系统中的数据集,例如共享文件系统、HDFS、HBase或任何提供HadoopInputFormat的数据源。

(一)通过并行集合创建RDD

  • Spark可以通过并行集合创建RDD。即从一个已经存在的集合、数组上,通过SparkContext对象调用parallelize()makeRDD()方法创建RDD。

1、利用parallelize()方法创建RDD

  • 执行命令:val rdd = sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8))
    在这里插入图片描述
  • 执行命令:val rdd = sc.parallelize(Array(100, 300, 200, 600, 500, 900))
    在这里插入图片描述
  • 说明:不能基于Map、Tuple和Set来创建RDD
    在这里插入图片描述

2、利用makeRDD()方法创建RDD

  • 执行命令:val rdd = sc.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8))
    在这里插入图片描述

  • 执行命令:rdd.collect(),收集rdd数据进行显示
    在这里插入图片描述

  • 其实,行动算子[action operator]collect()的括号可以省略的
    在这里插入图片描述

  • 思考题:取出rdd中的偶数
    在这里插入图片描述

  • 下一节,我们会详细学习RDD算子(转换算子和行动算子)

3、简单说明

  • 从上述命令执行的返回信息可以看出,上述创建的RDD中存储的是Int类型的数据。实际上,RDD也是一个集合,与常用的List集合不同的是,RDD集合的数据分布于多台机器上。

(二)从外部存储创建RDD

  • Spark可以从Hadoop支持的任何存储源中加载数据去创建RDD,包括本地文件系统和HDFS等文件系统。我们通过Spark中的SparkContext对象调用textFile()方法加载数据创建RDD。
  • Spark的textFile()方法可以读取本地文件系统或外部其他系统中的数据,并创建RDD。不同的是,数据的来源路径不同。
  • 先前我们以本地模式启动了Spark Shell,既可以访问本地文件,也可以访问HDFS文件。

1、从文件系统加载数据创建RDD

  • 执行命令:val rdd = sc.textFile("file:///home/test.txt")
    在这里插入图片描述

  • 注意:访问本地文件,必须加file://前缀,否则系统会认为是访问hdfs://master:9000/home/test.txt,从而会报错。

  • 执行命令:val lines = rdd.collect,查看RDD中的内容,保存到常量lines
    在这里插入图片描述

  • 执行命令:lines.foreach(println)(利用foreach遍历算子)
    在这里插入图片描述

  • 执行命令:for (line <- lines) println(line)
    在这里插入图片描述

  • 想法是活的,语法是死的,重要的是得先有想法,然后用语法去实现

课堂练习:给输出数据添加行号

  • 利用for循环来实现
    在这里插入图片描述
  • 利用foreach遍历算子来实现
    在这里插入图片描述

2、从HDFS中加载数据创建RDD

  • 执行命令:val rdd = sc.textFile("hdfs://master:9000/park/test.txt")
    在这里插入图片描述

  • 执行命令:val lines = rdd.collect,查看RDD中的内容
    在这里插入图片描述

  • 获取包含spark的行,执行命令:val sparkLines = rdd.filter(line => line.contains("spark"))(filter是一个转换算子[transformation operator])
    在这里插入图片描述

  • 其实,有更简单的写法,执行命令:val sparkLines = rdd.filter(_.contains("spark"))
    在这里插入图片描述

  • 利用遍历算子显示sparkLines内容
    在这里插入图片描述

  • 不写hdfs://master:9000前缀也是一样的效果
    在这里插入图片描述

四、读取文件的问题

(一)以集群方式启动Spark Shell

  • 执行命令:spark-shell --master spark://master:7077
    在这里插入图片描述

1、读取本地文件

  • 执行命令:val rdd = sc.textFile("file:///home/test.txt")
    在这里插入图片描述
  • 执行命令: rdd.collect,报错 - Input path does not exist: hdfs://master:9000/home/test.txt
    在这里插入图片描述
  • 结论:集群模式启动的Spark Shell不能读取本地文件

2、读取HDFS文件

  • 执行命令:val rdd = sc.textFile("hdfs://master:9000/park/test.txt")
    在这里插入图片描述
  • 执行命令:val rdd = sc.textFile("/park/test.txt")
    在这里插入图片描述
  • 结论:默认就是访问HDFS上的文件,因此hdfs://master:9000前缀可以不写

(二)以本地模式启动Spark Shell

  • 执行命令:spark-shell --master local[*]
    在这里插入图片描述

1、读取本地文件

  • 执行命令:val rdd = sc.textFile("file:///home/test.txt")
    在这里插入图片描述
  • 执行命令:val rdd = sc.textFile("/home/test.txt")
    在这里插入图片描述
  • 结论:本地模式启动的Spark Shell,默认读取的依然是HDFS文件,要访问本地文件,必须加file://前缀

2、访问HDFS文件

  • 执行命令:val rdd = sc.textFile("hdfs://master:9000/park/test.txt")
    在这里插入图片描述
  • 执行命令:val rdd = sc.textFile("/park/test.txt")
    在这里插入图片描述
  • 结论:默认就是访问HDFS文件,因此加不加hdfs://master:9000前缀都是一样的效果

(三)结论

  • 无论以本地模式还是以集群模式启动Spark Shell,都可以访问HDFS文件。集群模式启动的Spark Shell,不能访问本地文件,只能访问HDFS文件,加不加hdfs://master:9000前缀都是一样的效果。如果访问本地文件,必须以本地模式启动Spark Shell,而且还必须加file://前缀。总之,Spark Shell默认都是访问HDFS文件。

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

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

相关文章

4年软件测试工作经验,跳槽之后面试20余家公司的总结

先说一下自己的个人情况&#xff0c;普通二本计算机专业毕业&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;然而离职后到今天都没有收到一份offer&#xff01;一直在待业中&#xff0c;从离职第一天就开始准备简历&#xff0c…

快排的非递归实现

其思想与递归实现快排完全相同&#xff0c;可以先将第一次要排序的右边界和左边界先后入栈&#xff0c;然后判断栈 是否为空&#xff0c;不为空就出栈顶元素&#xff0c;并删除一次&#xff0c;由于栈是先进的后出&#xff0c;所以先出来的应该是左界&#xff0c; 再进行一次…

【C++】STL——unordered_map和unordered_set的介绍和使用

unordered_set和unordered_map的介绍和使用 文章目录unordered_set和unordered_map的介绍和使用一、unordered系列关联式容器二、unordered_set1.unordered_set的介绍2.unordered_set的构造方式3.unordered_set的函数接口说明4.unordered_multiset的介绍及使用三、unordered_ma…

【建议收藏】数据库 SQL 入门——约束(内附演示)

文章目录&#x1f4da;引言&#x1f4d6;约束&#x1f4d1;非空约束&#x1f4d1;唯一约束&#x1f4d1;主键约束&#x1f4d1;默认约束&#x1f4d1;检查约束&#x1f4d1;外键约束&#x1f516;外键的添加&#x1f516;删除/更新外键&#x1f4cd;总结&#x1f4da;引言 &…

【高危】Apache Linkis Gateway模块存在身份验证绕过漏洞(CVE-2023-27987)

漏洞描述 Apache Linkis 是一个用于将上层应用与底层数据引擎解耦&#xff0c;提供标准化接口的中间件。Gateway 是 Linkis 接受客户端和外部请求的主要入口点&#xff0c; 在 Apache Linkis 受影响版本中&#xff0c;由于在 Linkis Gateway 部署时产生的Token默认为LINKIS_C…

Linux打印口/LPT口出厂测试工具与使用说明

1 软件功能 该软件用于在Linux平台测试CH35X/CH38X&#xff08;PCI/PCIe转串并口&#xff09;的并口各引脚功能是否正常。方便对设备进行出厂测试。 2 并口测试硬件治具 在测试前&#xff0c;需要制作单独的硬件治具&#xff0c;按下表连接信号线&#xff1a; 25针并口座子堵…

面向削峰填谷的电动汽车多目标优化调度策略

说明书 MATLAB代码&#xff1a;面向削峰填谷的电动汽车多目标优化调度策略 关键词&#xff1a;电动汽车 削峰填谷 多目标 充放电优化 参考文档&#xff1a;店主自己整理的说明文档&#xff0c;公式、约束、数据齐全&#xff0c;可联系我查看 仿真平台&#xff1a;MATLAB YA…

iPhone如何不用iTunes将视频传输到电脑上?

随着智能手机的普及&#xff0c;iPhone已经成为了人们生活中必不可少的一部分。而随着iPhone摄像功能的逐渐完善&#xff0c;越来越多的用户开始将iPhone作为拍摄视频的工具。 但是&#xff0c;将iPhone中的视频传输到电脑并进行后续编辑处理或者备份储存&#xff0c;对于许多…

二极管专题:二极管钳位电路

二极管钳位电路 之前我们说过二极管的限幅功能 二极管专题&#xff1a;限幅电路。今天说的二极管的钳位电路和二极管的限幅电路都是利用了二极管正向压降一定的这么一个特点。限幅电路和钳位电路你说区别大呢&#xff0c;它也不大&#xff0c;说小呢也不小。就看你怎么理解了&…

Linux proc文件系统介绍

Linux proc文件系统 /proc/cmdline Arguments passed to the Linux kernel at boot time. Often done via a boot manager such as lilo(8) or grub(8) proc/[pid]/coredump_filter Since kernel 2.6.23, the Linux-specific /proc/PID/coredump_filter file can be used …

大数据项目实战之数据仓库:电商数据仓库系统——第6章 数据仓库环境准备

第6章 数据仓库环境准备 6.1 数据仓库运行环境 6.1.1 Hive环境搭建 1&#xff09;Hive引擎简介 Hive引擎包括&#xff1a;默认MR、Tez、Spark。 Hive on Spark&#xff1a;Hive既作为存储元数据又负责SQL的解析优化&#xff0c;语法是HQL语法&#xff0c;执行引擎变成了Sp…

【收藏】2023欧洲 KubeCon 和云原生大会上关于WebAssembly的一切

KubeCon CloudNativeCon EU 2023将于4月18日至21日在阿姆斯特丹举行&#xff0c;对于云原生开发者和云原生用户是一年中无比期待的大会。会议为期四天&#xff0c;是保持云原生计算最新趋势&#xff0c;与同行建立联系&#xff0c;并从行业专家学习的绝佳机会。此外&#xff0…

2023年税务师事务所行业研究报告

第一章 行业发展概况 1.1 行业概况 税务师事务所是依法设立并承办法律、法规、规章规定的涉税服务和鉴证业务的社会中介机构。税务师事务所的组织形式为有限责任制税务师事务所和合伙制税务师事务所&#xff0c;以及国家税务总局规定的其他形式。税务师事务所应当依法纳税&am…

软件测试实验:静态测试

目录 前言 一、实验目的 二、实验内容 三、实验步骤 四、实验过程 1、学生宿舍管理系统代码 2、汇总表 3、C语言编码规范 总结 前言 软件测试是软件开发过程中不可或缺的一个环节&#xff0c;它可以保证软件的质量和功能&#xff0c;提高用户的满意度和信任度。软件测…

通信工程有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是通信工程领域的一些SCI期刊推荐&#xff1a; IEEE Transactions on Communications&#xff1a; 该期刊由IEEE出版&#xff0c;是通信工程领域的顶级期刊&#xff0c;涵盖了通信系统、信号处理、无线通信、光通信、网络通信、通信安全等方面的研究。 IEEE Journal on S…

如何使用公网远程访问jupyter notebook【cpolar内网穿透】

文章目录前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口5. 固定公网地址转载自远控源码文章&#xff1a;公网远程访问jupyter notebook【cpolar内网穿透】 前言 Jupyter Notebook&#…

【Redis】多级缓存

【Redis】多级缓存 文章目录【Redis】多级缓存1. 传统缓存的问题2. 多级缓存方案2.1 JVM进程缓存2.1.1 本地进程缓存2.1.2 Caffeine2.2 Nginx缓存2.2.1 准备工作2.2.21. 传统缓存的问题 传统的缓存策略一般是请求到达 tomcat 后&#xff0c;先查询redis&#xff0c;如果未命中…

微服务高级篇【3】之分布式缓存Redis集群

文章目录前言一 单机Redis存在的问题二 Redis的安装三 Redis持久化3.1 RDB持久化3.1.1 触发条件3.1.2 RDB原理3.1.3 小结3.2 AOF持久化3.2.1 AOF原理3.2.2 AOF配置3.2.3 AOF文件重写3.3 RDB与AOF对比四 Redis主从集群4.1 搭建主从架构4.2 搭建主从集群4.2.1 集群结构4.2.2 准备…

【FFmpeg】自定义编码器适配

目录1 编码流程1.1 整体流程1.2 内部流程2 适配接口2.1 init、close2.2 option2.3 receive2.4 encode2.5 零拷贝的设计1 编码流程 FFmpeg是一个开源的多媒体框架&#xff0c;底层可对接实现多种编解码器&#xff0c;下面参考文件doc/examples/encode_video.c分析编码一帧的流程…

Adobe Illustrator2023(AI2023)图文安装教程

Adobe Illustrator2023(AI2023)简称AI&#xff0c;是一种应用于出版、多媒体和在线图像的工业标准矢量插画的软件。该软件主要应用于印刷出版、海报书籍排版、专业插画、多媒体图像处理和互联网页面的制作等&#xff0c;也可以为线稿提供较高的精度和控制&#xff0c;适合生产任…