- 博客(63)
- 收藏
- 关注
原创 SparkSQL-基本使用
有一个名为 ecommerce_data.csv 的 CSV 文件,包含以下列:order_id(订单编号)、product_id(商品编号)、product_name(商品名称)、quantity(购买数量)、price(商品单价)、user_id(用户编号)、order_date(订单日期)。使用sql风格操作的前提是将DataFrame注册成一个临时表,在程序中直接使用spark.sql()方式执行SQL查询,结果将作为一个DataFrame返回。(三)DataFrame的概念。
2025-05-14 09:51:38
329
原创 自定义分区(2)
MyPartitioner类继承自Partitioner,实现了numPartitions方法指定分区数量为 3 ,实现getPartition方法,根据球队名称判断分区索引,湖人对应分区 0,火箭对应分区 1,其他球队对应分区 2。2.在main方法中,创建包含球队信息的 RDD,然后调用partitionBy方法并传入自定义分区器MyPartitioner,对 RDD 进行分区,最后将分区后的数据保存到指定路径。("勇士", "info1"),("湖人", "info3"),自定义分区器的实现步骤。
2025-05-14 09:49:36
133
原创 自定义分区器-基础
这就类似于 Spark 中的分区,每个分区的数据可以在不同的计算节点上同时进行处理,从而加快整个数据处理的速度。在 Spark 中,分区是指将数据集按照一定的规则划分成多个较小的子集,每个子集可以独立地在不同的计算节点上进行处理,这样可以实现数据的并行处理,提高计算效率。在 Spark 中,RDD 是数据的集合,它会被划分成多个分区,这些分区可以分布在不同的计算节点上,就像图书馆的书架分布在不同的房间一样。【现场演示,如果文件是一个.gz文件,是一个不可拆分的文件,那么默认分区的数量就会是1】
2025-05-14 09:47:29
395
原创 Spart缓存(2)
MEMORY_ONLY_SER:将 RDD 以序列化的 Java 对象形式存储在内存中,相较于 MEMORY_ONLY,序列化后占用的内存空间更小,但读取时需要进行反序列化操作,会带来一定的性能开销。cache:其实是 persist 方法的一种特殊情况,它等价于调用 persist(StorageLevel.MEMORY_ONLY),也就是将数据以非序列化的 Java 对象形式存储在内存中。MEMORY_AND_DISK:优先把 RDD 以 Java 对象的形式存储在 JVM 的内存中。
2025-05-14 09:45:14
313
原创 Spart缓存
通过对比两次计算的耗时,可以明显发现第二次计算耗时会远小于第一次(在数据量较大或计算复杂时效果更显著),这就体现了cache方法缓存计算结果、避免重复计算、提升后续操作速度的作用。当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用。RDD通过persist方法或cache方法可以将前面的计算结果缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的行动算子时,该RDD将会被缓存在计算节点的内存中,并供以后重用。这就是没有缓存的效果。
2025-05-14 09:43:52
310
原创 Spark处理过程-行动算子
它会触发 Spark 作业的实际执行,对 RDD 中的所有元素进行计数,并将最终的计数结果返回给驱动程序。作用:reduce 用于对 RDD 中的元素进行全局聚合操作,例如计算 RDD 中所有元素的总和、最大值、最小值等。f: T => Unit:这是一个函数,它接收一个类型为 T 的元素(T 为 RDD 中元素的类型),并对该元素执行相应的操作,但不返回任何值(返回类型为 Unit)。返回值:返回一个包含 RDD 中所有元素的数组,数组元素的类型与 RDD 中元素的类型一致。参数说明:该算子没有参数。
2025-05-14 09:40:11
270
原创 Spark处理过程-转换算子
它的核心作用是对具有相同键的所有值进行聚合操作,通过用户提供的聚合函数将这些值合并成一个结果,从而实现数据的归约和统计。作用:对 RDD 中的每个元素应用给定的函数 f,将每个元素转换为另一个元素,最终返回一个新的 RDD。作用:筛选出 RDD 中满足函数 f 条件(即 f 函数返回 true)的元素,返回一个新的 RDD,新 RDD 中的元素类型与原 RDD 相同。作用:对 RDD 中的每个元素应用函数 f,函数 f 返回一个可遍历的集合,然后将这些集合中的元素扁平化合并成一个新的 RDD。
2025-05-14 09:36:43
412
原创 RDD-分区和分区器
分区数量过多,则会增加任务调度和管理的开销,同时也可能导致每个分区的数据量过小,无法发挥数据局部性的优势。此外,分区还能减少数据在网络中的传输,例如在进行数据聚合时,如果相同键的数据在同一个分区内,就无需跨节点传输数据,从而提高计算效率。在实际的大数据项目中,需要根据具体的数据特点和业务需求,灵活运用分区和分区器,不断优化 Spark 作业,以充分发挥 Spark 的强大功能。不同的分区器会根据键的特征,将具有相同或相似键的数据分配到同一个分区中,以便后续的聚合、连接等操作能够高效进行。
2025-05-14 09:32:47
458
原创 RDD算子-行为算子
行为算子是 RDD 中用于触发实际计算的操作,当调用行为算子时,Spark 会根据之前通过转换算子构建的有向无环图(DAG),从数据源开始执行所有的转换操作,最终将计算结果返回给用户或保存到指定位置。collect算子用于将 RDD 中的所有元素以数组的形式收集到 Driver 程序中,适用于 RDD 数据量较小的情况,因为它会将整个 RDD 的数据拉取到 Driver 端,若数据量过大,可能会导致 Driver 内存溢出。println(s"RDD中元素的数量为: $count")。
2025-05-14 08:20:12
511
原创 RDD算子-转换算子
RDD 的转换算子是一种惰性求值的操作,即当调用转换算子时,Spark 并不会立即执行计算,而是记录下对 RDD 的转换操作,构建一个有向无环图(DAG)。接下来,我们将详细介绍这些算子的用法。map算子是最基础也最常用的转换算子之一,它对 RDD 中的每个元素应用一个函数,将每个元素转换为一个新的元素,最终返回一个新的 RDD。union算子用于合并两个或多个 RDD,返回一个包含所有 RDD 中元素的新 RDD,合并后的 RDD 允许出现重复元素。RDD 算子深度解析:转换算子的原理与实战。
2025-05-14 08:18:38
634
原创 自定义分区器-基础
当使用 textFile 方法从外部存储(如 HDFS、本地文件系统等)读取文件创建 RDD 时,默认分区数通常由文件的块大小决定。对于 HDFS 文件,默认分区数等于文件的块数。例如,一个 128MB 的文件在 HDFS 上被分成 2 个 64MB 的块,那么创建的 RDD 默认分区数就是 2。在 Spark 里,弹性分布式数据集(RDD)是核心的数据抽象,它是不可变的、可分区的、里面的元素并行计算的集合。RDD 会被划分成多个分区,每个分区就是一个数据集片段,这些分区可以分布在集群的不同节点上。
2025-05-14 08:15:28
407
原创 RDD-数据清洗
从去除表头、处理缺失值和异常数据,到去除重复值,RDD 提供了丰富的转换和行动操作,使得数据清洗过程简洁高效。在实际的大数据项目中,数据清洗往往更加复杂多样,需要根据具体的数据特点和业务需求灵活运用 RDD 的各种操作。同时,随着 Spark 的发展,DataFrame 和 Dataset API 在数据清洗和处理方面也展现出强大的功能和优势,在后续的学习和实践中,我们也可以结合使用这些 API,进一步提升数据处理的效率和质量。RDD 案例:数据清洗实战。四、保存清洗后的数据。// 读取原始数据。
2025-05-14 08:14:03
845
原创 Linux操作系统命令-复杂命令(2)
ls命令可以查看文件夹下的文件信息,如果某个文件夹下的文件特别多,使用ls命令时,就只能显示后面一部分文件信息,那如果我们希望查看全部的文件信息,要怎么办呢?因为在linux下,我们要去下载安装新的软件时就需要用到它:下载下来的软件大多都是.tar格式,而安装的过程就是解压缩。会把111写入a.txt这个文件中,把之前的内容删除掉。把1.txt,2.txt,3.txt压缩到test.tar文件(会被自动创建)中。-c 建立一个压缩文件,把多个文件或者文件夹压缩到一个新的文件中。
2025-05-07 09:26:16
141
原创 Linux操作系统命令-复杂命令
示例:把目录dir1复制一份得到dir2. 那么对应的命令就是:cp -r dir1 dir2。示例: 把file1.txt 复制一份得到file2.t x t。移动操作: mv file.txt newdir/file.txt。说明:如果源文件和目标文件在同一个目录下,就是重命名,否则就是移动。重命名操作: mv file.txt newfile.txt。复制和移动都分为文件和文件夹,具体的命令是cp和mv。3. more -tail:查看文件的结尾部分的内容。格式: cp 源文件 目标文件。
2025-05-07 09:25:30
200
原创 【无标题】
RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。RDD的分区是RDD数据存储的最小单位。如下图示,假如1个RDD有3个分区,RDD内存储了123456,那么数据本质上分散在三个分区内进行存储。举个生活中的例子:高考的时候,每个班的同学都打散到不同的考场,此时的高3(8)班就是一个抽象的概念,在实际中,这个班级的学生可能分布在5个不同的考场。
2025-05-07 09:20:28
424
原创 finalshell的配置
我们在从本机开始去连接虚拟机时,都是通过ip地址来连接的,不方便。我们可以通过hostname的方式来访问。ping hadoop100或者是ping 192.168.10.100都应该可以通。5. 找到刚才建立的连接,点击连接。主机:192.168.10.100,或者是配置hosts之后的主机名。1. 点击开始安装,安装到D盘。安装目录没有中文,没有空格。2. 启动finalshell,新建。这个文件是一个没有后缀名的文本文件。2. 使用ping 命令来检查。1. 修改hosts文件。
2025-05-07 09:15:12
268
原创 RDD的基本概念及创建方式
从文件系统中创建:适用于从外部存储加载数据。从集合中创建:适用于将内存中的数据并行化为 RDD。通过转换操作创建:是最常见的创建方式,通过对已有 RDD 进行转换操作生成新的 RDD,支持各种复杂的数据处理逻辑。这三种方式满足了不同场景下的数据处理需求,是 Spark 编程中非常重要的基础内容。
2025-05-07 09:03:07
667
原创 MapReduce架构-打包运行
从 Java 7 开始,为了简化版本号的表示,Oracle 开始采用新的命名方式,将 1.x 改为 x。从 Java 9 开始,版本号的命名方式完全统一为 x,例如 Java 9、Java 11、Java 17 等,不再使用 1.x 的形式。我们集群上安装的java环境是1.8的,那么我们生成的代码也必须是这个版本的,否则,就会无法运行。我们集群上安装的java环境是1.8的,那么我们生成的代码也必须是这个版本的,否则,就会无法运行。在上面的代码中,我们的程序只能完成固定目录下的功能。
2025-05-07 09:00:36
916
原创 MapReduce架构-序列化
Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,Header,继承体系等),不便于在网络中高效传输。下面我们来看一个例子:通过代码来定义一个类,并创建它的一个对象,把这个对象保存到文件中(序列化),然后再写代码读取这个文件并还原回来。序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。
2025-05-07 08:56:07
321
原创 Yarn-tool接口
org.apache.hadoop.util.Tool 是 Apache Hadoop 框架里的一个接口,其用途是协助开发可通过命令行运行的 Hadoop 应用程序。ToolRunner 是 Hadoop 提供的一个实用类,可用于运行实现了 Tool 接口的应用程序。run(String[] args):此方法为应用程序的主要执行逻辑,接收命令行参数,返回一个整数代表执行结果(通常 0 表示成功,非 0 表示失败)。2.run 方法会打印出接收到的命令行参数,你可以在此添加自己的业务逻辑。
2025-05-07 08:54:35
412
原创 Spark-core-RDD入门
通过 SparkConf 类,你可以设置应用程序的名称、运行模式(如本地模式、集群模式)、资源分配(如内存、CPU 核心数)等。Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。- Distributed: 分布式存储的,表示数据是存放在不同的机器上的。不可变的:immutable。并行计算:集合中的数据可以被并行的计算处理,每个分区数据被一个Task任务处理。
2025-05-07 08:53:12
337
原创 Spark集群搭建-Standalone
通过jps命令去每台机器上查看运行的进程。进入到hadoop100机器,切换目录到/opt/module/spark-standalone/sbin下,运行命令 ./start-all.sh。进入/opt/module/把解压的内容重命名一下,mv spark-3.1.1-bin-hadoop3.2/ spark-standalone。注意,这里不要省略./,它表示的是当前目录下的start-all命令,如果省略了./,它就会先去环境变量PATH中指定的目录来找这个命令。
2025-04-30 15:46:57
341
原创 如何在idea中写spark程序
(1)访问Scala官方网站(https://www.scala-lang.org/download/)下载适合操 作系统的Scala安装包。安装Scala的操 作,也是一路默认安装即可。(2) 打开命令提示符(CMD),输入以下命令:scala -version 如果显示Scala 的版本信息,说明安装成功。Spark是基于scala的,当然它也可以支持java和scala还有python语言,我们这里会使用scala。它的功能是wordcount的功能:从指定的文件夹中去读取文件,并做词频统计。
2025-04-30 15:23:32
869
原创 如何搭建spark yarn模式的集群
1.上传并解压spark-3.1.2-bin-hadoop3.2.tgz,重命名解压之后的目录为spark-yarn。对应的命令是:tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /opt/module。使用xsync /opt/module/hadoop-3.1.3/etc/hadoop/同步一下。
2025-04-30 15:05:15
392
原创 spark和hadoop之间的对比和联系
Spark 和 Hadoop 都是大数据处理的重要工具,但 Spark 在处理速度、易用性和内存计算方面具有优势。尽管如此,Hadoop 仍然在数据存储和批处理方面发挥着重要作用。在实际应用中,许多组织选择同时使用 Spark 和 Hadoop,以利用它们各自的优势。例如,可以使用 Hadoop 进行数据存储和初步处理,然后使用 Spark 进行更快速的数据分析和处理。
2025-04-23 11:10:31
661
1
原创 关于yarn和hadoop
YARN(Yet Another Resource Negotiator)是 Apache Hadoop 的一个关键组件,它是一个资源管理平台,负责管理和调度计算资源。YARN 允许多个数据处理引擎(如 MapReduce、Spark、Flink 等)在同一个 Hadoop 集群上运行,从而提高了集群的利用率和灵活性。
2025-04-18 15:03:10
911
1
原创 mapreduce的工作原理
**分区(Partitioning)**:根据 key 的哈希值决定数据发送到哪个 Reduce 任务。- **Combiner(可选)**:本地 reduce,减少网络传输量。- **排序(Sorting)**:每个分区内的数据按键排序。- **数据本地性优化**:优先在存储数据的节点上执行任务。- **Map 阶段**:处理输入数据并生成中间键值对。- **Reduce 阶段**:对中间结果进行汇总处理。- **数据从 Map 端拷贝到 Reduce 端**
2025-03-31 20:07:57
383
原创 Hadoop集群常用指令
启动所有Hadoop服务。# 停止所有Hadoop服务。# 列出所有运行中的应用程序。# 查看MapReduce作业状态。## MapReduce作业命令。# 检查YARN节点状态。2. **文件权限和所有权**# 查看集群资源使用情况。# 提交MapReduce作业。1. **平衡HDFS数据**1. **启动/停止集群**# 检查HDFS一致性。2. **检查集群状态**# 检查HDFS状态。# 检查集群健康状态。1. **基本文件操作**# 查看应用程序日志。2. **检查文件系统**
2025-03-31 20:06:13
317
原创 linux常见操作命令
ls命令可以查看文件夹下的文件信息,如果某个文件夹下的文件特别多,使用ls命令时,就只能显示后面一部分文件信息,那如果我们希望查看全部的文件信息,要怎么办呢?因为在linux下,我们要去下载安装新的软件时就需要用到它:下载下来的软件大多都是.tar格式,而安装的过程就是解压缩。会把111写入a.txt这个文件中,把之前的内容删除掉。但是,在linux里,这不能使用鼠标操作,需要用到显示文件的命令。ls 用来显示文件夹下的文件信息,more用来翻页,而 | 就可以把前一个的结果作为输入传递给more。
2025-03-03 19:35:55
232
原创 vi常见操作命令
命令模式:在这个模式下,所敲的按键编辑器都理解为命令,以命令来驱动执行不同的功能。当我们通过VI命令第一次打开文件的时候,进入的就是命令模式。vi编辑器有三种工作模式,分别是命令模式,编辑模式,底线模式。(2)按下o:进入到编辑输入模式后,在当前行的后面添加一行空行(当前行的下一行)2. 如果文件已经存在,此时就打开这个文件,进入命令模式。从命令模式切换到底线命令模式,输入: 进入底线命令模式。(1)按下i: 进入编辑模式,定位到当前光标前面。(3)在输入模式下,按下ESC退回到命令模式。
2025-03-03 19:34:30
178
原创 配置虚拟机IP并使用finalshell连接
linux中,ip地址是写在配置文件(/etc/sysconfig/network-scripts/ifcfg-ens33)中,这里使用 vi 编辑器去修改即可!命令如下:vi /etc/sysconfig/network-scripts/ifcfg-ens33。注意:这里的第三个部分的10并不是固定的,我们自己可以约定,但是约定之后就要固定下来。如果不进行设置,每次启动机器时都可能是随机的IP,不方便我们后续操作。让所有的vm配置的虚拟机使用NAT时,它们的网段都是一致的。(3)设置虚拟机的IP。
2025-03-03 19:32:08
348
原创 虚拟机安装教程
虚拟机安装配置对新手来说还是太吃操作了,有没有更简单的方法推荐一下,有的兄弟,有的,现在我来推荐一套更简单快捷的操作。链接:https://pan.xunlei.com/s/VOJXe-jE0YiFoh1EdnaJDyxhA1#分享文件:finalshell_install.exe等。复制这段内容后打开迅雷,查看更方便。
2025-02-21 15:19:18
203
原创 Scala的迭代器
无论底层集合的具体结构如何,只要能获取到迭代器,就可以使用相同的hasNext和next方法来遍历元素。zip方法用于将两个迭代器的元素按顺序组合成一个新的迭代器,其中每个元素是一个包含两个迭代器对应位置元素的元组。如果两个迭代器的长度不同,zip操作会在较短的迭代器耗尽时停止。迭代器采用延迟计算的方式,它不会将整个集合加载到内存中,而是在每次调用next方法时才计算并返回下一个元素。返回一对迭代器,它们可以独立遍历原始迭代器中的元素序列。take 只处理当前开始的,指定数量的元素,返回一个新的迭代器。
2024-11-14 08:56:27
469
原创 Scala图书馆创建图书信息
1.创建一个可变 Set,用于存储图书馆中的书籍信息(假设书籍信息用字符串表示,如 “Java 编程思想”“Scala 实战” 等),初始化为包含几本你喜欢的书籍。4.检查某一本特定的书籍(如 “Python 从入门到实践”)是否在图书馆集合中,使用 contains 方法,并输出结果。7.求出两个图书馆书籍集合的交集,使用 intersect 方法,并输出结果。6.求出两个图书馆书籍集合的并集,使用 union 方法,并输出结果。5.创建另一个可变 Set,表示另一个图书馆的书籍集合。
2024-11-12 14:43:35
267
原创 Scala的Map集合
如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类。在 Scala 中 你可以同时使用可变与不可变 Map,不可变的直接使用 Map,可变的使用 mutable.Map。查询 :get方法,输入key,如果找到,就返回包装数据,如果没有找到,就返回None。Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。直接:map(key名)如果key不存在,就会报错。Map常用操作有增加,删除,修改,查询。
2024-11-12 14:41:10
231
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人