- 博客(65)
- 收藏
- 关注
原创 SparkSQL数据提取和保存
在前面我们学习了RDD的算子还有分区器,今天我们来一起完成一个大一点的案例,通过案例来巩固学习内容。下面来做一个综合案例:读入csv文件中的数据,并做简单的数据筛选,然后 写入数据到数据库。//创建一个properties对象,用来储存mysql的连接信息。//将数据写入到mysql的数据库中的user表中。准备工作:建立一个.csv文件,然后添加基本数据。//过滤年龄<20的数据。
2025-05-14 09:07:28
207
原创 SparkSQL操作MySQL
前面的课程我们学习了如何从csv文件中读入数据,这相当于是对csv这种类型的数据的操作。若已安装,需要先做卸载MySQL的操作命令是:rpm -e --nodeps mariadb-libs。(1)scala-library 是 Scala 语言的基础库,是编写 Scala 程序的必要条件。(2)spark-sql_2.12 提供了 Spark SQL 的功能,用于高效的数据处理和分析。初始密码太难记了,我们先修改一下密码。使用的命令是: mysqld --initialize --user=mysql。
2025-05-14 09:06:10
1363
原创 结构化数据处理
agg(sum($"quantity").as("total_quantity"), sum($"quantity" * $"price").as("total_sales")):对每个分组进行聚合操作,计算销售总量和销售总额,并分别命名为 total_quantity 和 total_sales。使用sql风格操作的前提是将DataFrame注册成一个临时表,在程序中直接使用spark.sql()方式执行SQL查询,结果将作为一个DataFrame返回。// 显示 DataFrame 的前几行数据。
2025-05-14 09:04:45
423
原创 RDD自定义分区器-案例
在代码中,通过编写一个自定义的分区函数,根据用户 ID 的范围返回对应的分区编号。如在之前的示例代码中,custom_partitioner 函数根据不同的 ID 范围返回 0、1、2 三个分区编号,从而实现按照地区进行分区的目的。具体来说,将用户 ID 在 0 - 1000 的订单数据分到一个分区,1001 - 2000 的分到另一个分区,2001 及以上的分到第三个分区。问题描述:需要根据特定的用户 ID 范围来定义分区规则,确保相同地区的订单数据被分配到相同的分区。// 5. 保存计算之后的结果。
2025-05-14 09:03:54
395
原创 Spark自定义分区器--基础
这就类似于 Spark 中的分区,每个分区的数据可以在不同的计算节点上同时进行处理,从而加快整个数据处理的速度。MyPartitioner类继承自Partitioner,实现了numPartitions方法指定分区数量为 3 ,实现getPartition方法,根据球队名称判断分区索引,湖人对应分区 0,火箭对应分区 1,其他球队对应分区 2。在 Spark 中,RDD 是数据的集合,它会被划分成多个分区,这些分区可以分布在不同的计算节点上,就像图书馆的书架分布在不同的房间一样。
2025-05-14 09:02:42
372
原创 Spark缓存
当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用。MEMORY_ONLY_SER:将 RDD 以序列化的 Java 对象形式存储在内存中,相较于 MEMORY_ONLY,序列化后占用的内存空间更小,但读取时需要进行反序列化操作,会带来一定的性能开销。RDD通过persist方法或cache方法可以将前面的计算结果缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的行动算子时,该RDD将会被缓存在计算节点的内存中,并供以后重用。
2025-05-14 09:01:31
548
原创 Spark处理过程--案例数据清洗
以下是 10 条符合上述示例中数据格式(姓名,年龄,性别)的测试数据,包含了一些可能需要清洗掉的无效数据,你可以将其保存为一个文本文件,用于测试上面的数据清洗程序。这里面:“李四” 的年龄为空,“赵六” 和 “吴九” 的年龄不是有效的数字,在执行数据清洗程序时,这些行应该会被过滤掉。//拆分出年龄,判断是不是数字,是就保留记录“45”,“abc”(正则表达式\d+)过滤算子中,函数返回为false,就会被过滤掉,函数返回为true,就会被保留下来。好了,问题描述清楚了,下面我们来看看实现的思路。
2025-05-14 09:00:29
566
原创 Spark--行动算子
行动算子是触发 Spark 计算的“触发点”,因为 Spark 的 RDD 是懒惰计算的,只有在执行行动算子时,才会真正开始计算。它会触发 Spark 作业的实际执行,对 RDD 中的所有元素进行计数,并将最终的计数结果返回给驱动程序。f: T => Unit:这是一个函数,它接收一个类型为 T 的元素(T 为 RDD 中元素的类型),并对该元素执行相应的操作,但不返回任何值(返回类型为 Unit)。返回值:返回一个包含 RDD 中所有元素的数组,数组元素的类型与 RDD 中元素的类型一致。
2025-05-14 08:58:59
361
原创 Spark处理过程-转换算子
它的核心作用是对具有相同键的所有值进行聚合操作,通过用户提供的聚合函数将这些值合并成一个结果,从而实现数据的归约和统计。作用:对 RDD 中的每个元素应用给定的函数 f,将每个元素转换为另一个元素,最终返回一个新的 RDD。作用:筛选出 RDD 中满足函数 f 条件(即 f 函数返回 true)的元素,返回一个新的 RDD,新 RDD 中的元素类型与原 RDD 相同。作用:对 RDD 中的每个元素应用函数 f,函数 f 返回一个可遍历的集合,然后将这些集合中的元素扁平化合并成一个新的 RDD。
2025-05-14 08:57:08
903
原创 在虚拟机上安装Hadoop
etc/profile 是系统级别的全局配置文件,当用户进行登录操作时,该文件会被执行,而/etc/profile 脚本里包含了对/etc/profile.d 目录下脚本的扫描和执行逻辑。要运行 hadoop 程序我们先要去安装它的基础环境,因为它是基于java的,所以我们要先去安装 java.JDK,然后再去安装hadoop。所以,我们可以把需要用到的环境变量配置到一个新的.sh文件中,再把这个新的文件放在profile.d目录下。(1)新建/ete/profile.d/my env. sh文件。
2025-05-14 08:55:08
333
原创 快速配置host
hosts 文件是一个本地的文本文件,它的作用是将主机名(www.douyin.com)映射到对应的 IP 地址,在 DNS(域名系统)解析之前,系统会先查询 hosts 文件来确定目标主机的 IP 地址。在记事本中选择 “文件” -> “打开”,在 “文件类型” 中选择 “所有文件”,定位到 C:\Windows\System32\drivers\etc 目录,选择 hosts 文件并打开。在系统窗口中,点击 “更改设置”,在弹出的 “系统属性” 窗口中,切换到 “计算机名” 选项卡。
2025-05-14 08:53:50
423
原创 克隆虚拟机组成集群
在随后的设置中,请注意两点:(1)要给其他两台虚拟机取不同的名字。要注意,这里是虚拟机的名称,而不是它的hostname。(2)要将这两台克隆出来的虚拟机和hadoop100保存在同一个磁盘目录下,方便我们统一管理。克隆之后,我们得到了hadoop101,hadoop102,由于它们是从hadoop100直接扣克隆过来的,所以目前他们的ip和hostname都是很hadoop100是一样的,这里就需要修改下。vm软件提供了克隆的功能,它可以允许我们从一台虚拟机上快速克隆出其他的一模一样的主机。
2025-05-14 08:52:22
205
原创 配置Hadoop--home的环境变量
生命周期:Maven 定义了一套标准的项目构建生命周期,主要包括 `clean`、`default` 和 `site` 三个生命周期。每个生命周期由多个阶段(phase)组成,例如 `default` 生命周期包含 `compile`、`test`、`package`、`install`、`deploy` 等阶段。Maven 可以帮助你管理这些依赖项,你只需在项目的 `pom.xml` 文件中声明所需的依赖,Maven 就会自动从远程仓库下载这些依赖项,并将其添加到项目的类路径中。
2025-05-07 10:10:08
410
原创 如何数据清洗
对于异常值,可以根据具体情况进行处理。在完成数据清洗后,对清洗后的数据进行验证,确保数据的准确性和一致性。对于数值型数据,可以使用均值、中位数、众数等统计量来填充缺失值。例如,对于年龄变量的缺失值,可以用该变量的均值来填充。了解数据的来源、格式、范围和含义,明确数据所包含的变量、观测值以及数据类型,比如是数值型、字符型还是日期型等。如果缺失值较少,可以考虑删除包含缺失值的行或列,但要注意这可能会导致数据量减少,影响分析结果的准确性。检查数据集中是否存在缺失值、重复值、错误值以及异常值等问题。
2025-05-07 09:13:33
138
原创 Hadoop的序列化
序列化的时候,它会自动被调用,将一个内存中的对象,序列化成为一个字节序列。如果序列化的属性不是Hadoop的序列化类型,就要调用相应的方法把它进行序列化。Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,Header,继承体系等),不便于在网络中高效传输。下面我们来看一个例子:通过代码来定义一个类,并创建它的一个对象,把这个对象保存到文件中(序列化),然后再写代码读取这个文件并还原回来。(五)hadoop的序列化。
2025-05-07 09:12:03
391
原创 在sheel中运行Sprak----RDD
在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。RDD的分区是RDD数据存储的最小单位。举个生活中的例子:高考的时候,每个班的同学都打散到不同的考场,此时的高3(8)班就是一个抽象的概念,在实际中,这个班级的学生可能分布在5个不同的考场。
2025-05-07 09:10:42
368
原创 在idea中编spark并运行
(1)访问Scala官方网站(https://www.scala-lang.org/download/)下载适合操 作系统的Scala安装包。前面我们搭建好三种不同的集群,但是还没有开始学习Spark的核心内容,接下来,我们会使用Idea编辑器来写代码运行Spark程序,为我们后续的学习打好基础。Spark是基于scala的,当然它也可以支持java和scala还有python语言,我们这里会使用scala。它的功能是wordcount的功能:从指定的文件夹中去读取文件,并做词频统计。
2025-05-07 09:08:51
588
原创 在Spark集群搭建及Yarn
1.上传并解压spark-3.1.2-bin-hadoop3.2.tgz,重命名解压之后的目录为spark-yarn。5. /opt/module/spark-standalone/examples/jars/spark-examples_2.12-3.1.1.jar:指定了包含应用程序代码的 JAR 文件的路径。NodeManager:部署在集群中的每个节点上,负责管理该节点上的资源使用情况,监控容器的运行状态,并且与 ResourceManager 保持通信,汇报节点的资源使用信息。
2025-05-07 09:05:42
440
原创 Spark及单机模式运行
在安装Spark时,它就提供了一些示例程序,我们可以直接来调用。进入到spark-local,运行命令spark-submit命令。mv是linux的命令,这里的 \ 是换行输入的意思,整体的代码就只有一句,只不过太长了,我们把它拆开成几个部分来输入,其中\ 的意思就是这里写不下,写在下一行。请注意,它并不会产生新的文件,而是直接在控制台输出结果。接下来的操作,我们把它上传到集群中的节点,并解压运行。1.打开etc/profile.d/my_env.sh文件中,补充设置spark的环境变量。
2025-05-07 09:02:54
241
原创 教你认识Spark
为了实现这样的要求,同时获得最大灵活性,Spark支持在各种集群管理器(Cluster Manager)上运行,包括Hadoop YARN、Apache Mesos,以及Spark自带的一个简易调度器,叫作独立调度器。Spark:Spark Streaming 提供了强大的实时数据处理能力,它可以将实时数据流分割成小的批次进行处理,实现准实时的数据分析。此外,Spark 还支持 Structured Streaming,提供了更高级的、基于 SQL 的实时流处理模型,使得实时数据处理更加容易和高效。
2025-05-07 09:01:27
539
原创 Spark和Hadoop之间的联系
通过这种集成,用户可以在一个统一的大数据平台上,结合 Hadoop 和 Spark 的各种组件,根据不同的业务需求选择合适的工具和技术,构建复杂的大数据处理和分析系统。Spark 以其内存计算的特性而闻名,能够在内存中对数据进行快速处理,相较于传统基于磁盘的计算框架,大大提高了数据处理的速度。Hadoop:Hadoop 的 MapReduce 编程模型相对较为底层和复杂,开发人员需要编写大量的代码来实现数据处理逻辑,尤其是在处理复杂的数据转换和多阶段计算时,代码量会非常庞大,开发和维护成本较高。
2025-05-07 09:00:01
504
原创 教你学会yarn
通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源, 这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度是采用的是先进先出(FIFO)策略。但是实际中,资源是有限的,并且在繁忙的群集上, 应用程序通常将需要等待其某些请求得到满足。现在,如果B用户在其他作业仍在运行时开始第二个作业,它将与B的另一个作业共享其资源,因此B的每个作业将拥有资源的四分之一,而A的继续将拥有一半的资源。
2025-05-07 08:58:19
691
原创 如何流量统计
但是,这里有一个问题:map和reduce这两个函数都是通过key,value的方式来进行数据交互的,这里的key可以设置为手机号,而value值就比较复杂,它有两个信息:上行流量和下行流量要统计。而这就必然引出一个新的问题:因为key,value是需要进行磁盘的读写的,所以它们必须要能序列化,如果我们创建一个新的类来描述流量数据,就必须也实现序列化。我们有一份统计数据,这个数据是关于手机号消耗流量的情况,需求统计每一个手机号耗费的总上行流量、总下行流量、总流量。
2025-05-07 08:55:50
860
原创 如何数据压缩
有损压缩则会在一定程度上牺牲数据的精度来换取更高的压缩比,适用于对数据质量损失有一定容忍度的场景,如图像、音频、视频等多媒体数据。即使你的MapReduce的输入输出文件都是未压缩的文件,你仍然可以对Map任务的中间结果输出做压缩,因为它要写在硬盘并且通过网络传输到Reduce节点,对其压缩可以提高很多性能,这些工作只要设置两个属性即可,我们来看下代码怎么设置。数据压缩是指在不丢失或尽可能少丢失数据信息的前提下,通过特定的算法和技术,对原始数据进行重新编码和处理,以减少数据存储空间或传输带宽的过程。
2025-05-07 08:53:27
237
原创 如何创建Maven项目
步骤一:打开 IDEA,点击 File -> Settings(Windows/Linux)或者 IntelliJ IDEA -> Preferences(Mac),进入设置界面,然后找到 Build, Execution, Deployment -> Build Tools -> Maven。步骤三:可以在 User settings file 中指定 settings.xml 文件的路径(一般使用默认路径即可),Local repository 中指定本地仓库的路径,配置完成后点击 OK 保存设置。
2025-05-07 08:51:31
359
原创 yarn的定义
应用程序管理器则负责每个具体应用程序的资源请求和任务调度。它将资源管理和作业调度分离,提供了一个通用的资源管理平台,可支持多种计算框架,比如 MapReduce、Spark、Storm 等。YARN 即 Yet Another Resource Negotiator,它是 Apache Hadoop 2.x 及后续版本中的集群资源管理系统,也是 Hadoop 生态系统的核心组件之一。借助 YARN,集群能够更高效地利用资源,不同的计算框架可以共享集群资源,进而提升资源利用率和集群的整体性能。
2025-04-18 19:30:00
260
原创 Linux与编写有关的命令
作用:该命令会将字符串 "abc" 追加到文件 a.txt 的末尾。如果文件 a.txt 不存在,系统会自动创建这个文件,然后将 "abc" 写入其中;如果文件 a.txt 已经存在,那么 "abc" 会被添加到文件现有内容的后面。如果文件 a.txt 已经存在,那么该文件原有的内容会被清空,然后将 "abc" 写入文件。tar -xzvf archive.tar.gz:解压tar.gz文件。gzip file.txt:压缩文件为file.txt.gz。unzip archive.zip:解压zip文件。
2025-03-05 07:58:35
294
原创 linux 里vi编辑器的使用
Vim 是 Linux 系统中常用的文本编辑器,它有三种主要模式:命令模式、插入模式和底线模式。在命令模式下按 i(insert)、a(append)或 o(open new line)等键进入插入模式。不直接输入文本,而是输入命令(如移动光标、删除、复制等)。从插入模式或底线模式按 Esc 键返回命令模式。插入模式用于文本编辑,编辑完成后需返回命令模式。底线模式用于执行高级命令,完成后返回命令模式。:q:退出(未保存时需加!命令模式是核心模式,用于切换到其他模式。在命令模式下按 : 键进入底线模式。
2025-02-28 14:02:31
307
原创 VMware Workstation 17 Pro 虚拟机安装教程
在VMware Workstation 17 Pro的菜单栏中,选择“虚拟机” -> “设置” -> “CD/DVD(SATA)” -> “使用ISO映像文件”,然后选择你的操作系统ISO镜像文件。创建新的虚拟机: 在VMware Workstation 17 Pro的主界面,点击“创建新的虚拟机”按钮。启动虚拟机: 在VMware Workstation 17 Pro的主界面,选择你刚刚创建的虚拟机,然后点击“编辑虚拟机”按钮。选择安装方法: 选择“稍后安装操作系统”选项,然后点击“下一步”。
2025-02-21 15:17:32
550
原创 scala的统计词频
/对于m1,他是一个Map(thank:10,is:5),现在需要对他进行排序,把出现次数最多的放在最前面,然后再输出。//\\w+:大写字符表示:非字(不是一个字的字符。val arr = content.split("\\w ")//得到一个字符串数组。writer.close()//结束写入。//从文件1.txt中,读取内容。//把字符串中的每个单词,拆出来。//4.把结果保存到一个新文件中。//把结果保存到一个新文件中。// +:一个或者多个。//输出排序后的Map。//排序后输出Map。
2024-12-17 22:53:37
523
原创 在scala中分析同学成绩
foreach(s=>println(s"姓名${s.name},数学${s.shuxue},总分${s.total}"))orderList.foreach(s=>println(s"姓名:${s.name},总分:${s.total}"))// println("当前行是", name, yingyu, total, avg)println("数学平均分",shuxuezongfen/list.length)println("语文平均分",yuwenzongfen/list.length)
2024-12-12 07:59:47
833
原创 Scala函数的字面量语法
Scala的函数字面量语法 Scala的函数字面量语法为: (参数列表) => {方法体} 与 定义函数 的语法相比,它省略了def关键字、函数名以及函数的返回类型。在Scala的函数字面量的定义中直接把参数列表与方法体通过=>相连。例如定义一个函数字面量对输入变量加1并返回,即 (x:Int)-=> {x+1}。由于Scala的函数字面量没有定义函数名,所以又把这种函数字面量称为匿名函数。函数字面量使用箭头符号 => 来分隔参数列表与函数体。Scala的函数字面量语法。
2024-12-12 07:44:06
362
原创 Scala的链式风格
Scala 的链式风格通常指的是在代码中使用一系列的方法调用,这些方法调用通过点号(.)连接在一起,形成一条链。这种风格在函数式编程中非常常见,因为它可以提高代码的可读性和表达力。以下是一些Scala链式风格的示例: 方法链:在对象上连续调用多个方法。选项(Option)链:Scala中的Option类型用于表示可能存在也可能不存在的值。格式:对象,方法1().方法2().方法3().方法3()链式风格:在方法中返回当前对象!
2024-12-12 07:43:59
459
原创 scala身份证中的秘密
val m1 = Map((41, "河南"), (42, "湖北"), (43, "湖南"), (44, "广东"))val id = "42022220080903332X".toUpperCase//toUpperCase变大写。val year = id.substring(6, 10) //6,7,8,9这个下标。println(s"籍贯是${m1.get(province)}")println(s"生日是:${birthday}")println(s"年份是:${year}")
2024-12-12 00:16:38
710
原创 Scala 中Stack和Queue两种常用集合类型
数据结构特点:Queue是一种先进先出(First In First Out,FIFO)的数据结构,类似于排队等候的队伍,最先进入队列的元素总是最先被取出。综上所述,Scala 中的Stack和Queue是两种不同的数据结构,分别适用于不同的应用场景,开发者可以根据具体的需求选择合适的集合类型来实现相应的功能。查看操作 top查看栈顶元素,不移除,时间复杂度 O (1) head查看队头元素,不移除,时间复杂度 O (1)head:用于查看队列的头部元素,但不移除它,时间复杂度为 O (1)。
2024-12-12 00:16:17
427
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人