自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 SparkSQL-数据提取和保存

在前面我们学习了RDD的算子还有分区器,今天我们来一起完成一个大一点的案例,通过案例来巩固学习内容。下面来做一个综合案例:读入csv文件中的数据,并做简单的数据筛选,然后 写入数据到数据库。11,name,age 12,xiaoming,24 13,小花,19。//创建一个properties对象,用来储存mysql的连接信息。准备工作:建立一个.csv文件,然后添加基本数据。//将数据写入到mysql的数据库中的user表中。//过滤年龄<20的数据。

2025-05-14 08:36:19 244

原创 SparkSQL操作Mysql

前面的课程我们学习了如何从csv文件中读入数据,这相当于是对csv这种类型的数据的操作。请注意,这里并没没有单独添加spark_core的依赖,因为在spark-sql中已经包含了spark_core。若已安装,需要先做卸载MySQL的操作命令是:rpm -e --nodeps mariadb-libs。(2)spark-sql_2.12 提供了 Spark SQL 的功能,用于高效的数据处理和分析。使用的命令是: mysqld --initialize --user=mysql。启动MySQL服务。

2025-05-14 08:35:25 812

原创 结构化数据处理

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 08:34:28 290

原创 RDD的自定义分区器-案例

在代码中,通过编写一个自定义的分区函数,根据用户 ID 的范围返回对应的分区编号。如在之前的示例代码中,custom_partitioner 函数根据不同的 ID 范围返回 0、1、2 三个分区编号,从而实现按照地区进行分区的目的。具体来说,将用户 ID 在 0 - 1000 的订单数据分到一个分区,1001 - 2000 的分到另一个分区,2001 及以上的分到第三个分区。问题描述:需要根据特定的用户 ID 范围来定义分区规则,确保相同地区的订单数据被分配到相同的分区。

2025-05-14 08:33:26 312

原创 Spark自定义分区器-基础

这就类似于 Spark 中的分区,每个分区的数据可以在不同的计算节点上同时进行处理,从而加快整个数据处理的速度。MyPartitioner类继承自Partitioner,实现了numPartitions方法指定分区数量为 3 ,实现getPartition方法,根据球队名称判断分区索引,湖人对应分区 0,火箭对应分区 1,其他球队对应分区 2。在 Spark 中,RDD 是数据的集合,它会被划分成多个分区,这些分区可以分布在不同的计算节点上,就像图书馆的书架分布在不同的房间一样。

2025-05-14 08:31:36 358

原创 Spark缓存

当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用。MEMORY_ONLY_SER:将 RDD 以序列化的 Java 对象形式存储在内存中,相较于 MEMORY_ONLY,序列化后占用的内存空间更小,但读取时需要进行反序列化操作,会带来一定的性能开销。RDD通过persist方法或cache方法可以将前面的计算结果缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的行动算子时,该RDD将会被缓存在计算节点的内存中,并供以后重用。

2025-05-14 08:30:44 291

原创 Spark处理过程-案例数据清洗

(一)需求说明假设你有一个包含用户信息的文本文件,每行格式为 姓名,年龄,性别,需要清洗掉年龄为空或者非数字的行。以下是 10 条符合上述示例中数据格式(姓名,年龄,性别)的测试数据,包含了一些可能需要清洗掉的无效数据,你可以将其保存为一个文本文件,用于测试上面的数据清洗程序。【教师展示要清洗的数据,请同学们观察,并回答应该要清洗掉哪些数据?】张三,25,男李四,,女王五,30,男赵六,a,女孙七,35,男周八,40,女吴九,abc,男郑十,45,女王十,50,男李二,55,女这里面:“李四” 的年龄为空,

2025-05-14 08:29:04 337

原创 Spark处理过程-行动算子

行动算子是触发 Spark 计算的“触发点”,因为 Spark 的 RDD 是懒惰计算的,只有在执行行动算子时,才会真正开始计算。它会触发 Spark 作业的实际执行,对 RDD 中的所有元素进行计数,并将最终的计数结果返回给驱动程序。f: T => Unit:这是一个函数,它接收一个类型为 T 的元素(T 为 RDD 中元素的类型),并对该元素执行相应的操作,但不返回任何值(返回类型为 Unit)。返回值:返回一个包含 RDD 中所有元素的数组,数组元素的类型与 RDD 中元素的类型一致。

2025-05-14 08:27:57 258

原创 Spark处理过程-转换算子

它的核心作用是对具有相同键的所有值进行聚合操作,通过用户提供的聚合函数将这些值合并成一个结果,从而实现数据的归约和统计。作用:对 RDD 中的每个元素应用给定的函数 f,将每个元素转换为另一个元素,最终返回一个新的 RDD。作用:筛选出 RDD 中满足函数 f 条件(即 f 函数返回 true)的元素,返回一个新的 RDD,新 RDD 中的元素类型与原 RDD 相同。作用:对 RDD 中的每个元素应用函数 f,函数 f 返回一个可遍历的集合,然后将这些集合中的元素扁平化合并成一个新的 RDD。

2025-05-14 08:26:39 249

原创 在sheel中运行Spark ——RDD

-master local[*] 表示在本地模式下运行,使用所有可用的CPU核心。如果是在集群环境中,可以指定相应的集群模式,如 spark://master_host:port (Standalone模式)、 yarn (YARN模式)等。在Shell中运行基于Spark RDD(弹性分布式数据集)的程序,一般可以通过 spark-shell 交互式环境来实现。确保已经安装好Spark并且配置了环境变量。// 读取文本文件创建。

2025-05-07 08:22:09 201

原创 在Idea中编写Spark程序并运行

1. 创建Maven项目:打开IDEA,选择“File” -> “New” -> “Project”,在弹出的窗口左侧选择“Maven”,点击“Next”。按照提示设置项目的GroupId、ArtifactId、Version等信息后点击“Finish”,完成项目创建。2. 添加Spark依赖:在项目的 pom.xml 文件中添加Spark相关依赖。

2025-05-07 08:21:19 164

原创 在spark里通过jps命令,看到的进程

具体看到的进程名称可能因Spark版本和部署方式略有不同。例如,在Spark 3.x版本中,Master进程可能显示为 org.apache.spark.deploy.master.Master ,Worker进程可能显示为 org.apache.spark.deploy.worker.Worker 等。- Worker进程:在Worker节点上,能看到 Worker 进程,它主要负责向Master注册,并管理所在节点的计算资源,接收Master分配的任务并在本地执行。

2025-05-07 08:20:35 210

原创 教你如何创建Maven项目

3. 填写项目信息:点击“Next”后,填写项目的基本信息。展开“Artifact Coordinates”,输入项目名称“name”、存储位置“Location”、“GroupId”“ArtifactId”以及“Version”等信息。或者点击菜单栏“File”,选择“New”->“Project”。2. 选择Maven项目类型:在创建项目窗口左侧选择“Maven”选项,可勾选“Create from archetype”选项来使用Maven原型创建项目,也可直接点击“Next”创建简单项目。

2025-05-07 08:19:46 224

原创 Scala的数据类型匹配

在Scala中,数据类型匹配通常使用 match 表达式来实现,它类似于其他语言中的 switch 语句,但功能更强大,可以对不同类型的值进行模式匹配。在这个例子中,对 num 的值进行匹配,当 num 为 1 时返回 "one" ,为 2 时返回 "two" ,其他情况返回 "other" , _ 表示默认匹配。此例中 value 的类型为 Any , match 表达式不仅匹配了值(如 10 ),还对 String 类型的值进行了条件判断(根据字符串长度)来返回不同结果。

2025-05-07 08:18:55 473

原创 如何在idea中写spark程序

3. 配置Scala SDK:如果编写Scala语言的Spark程序,需安装Scala插件(IDEA可能已内置)。4. 创建包和类:在 src/main/java (或 src/main/scala )目录下创建包,右键包名选“New” -> “Java Class”(或“Scala Class”)创建程序类。1. 创建Maven项目:打开IDEA,选择“Create New Project”,在弹出窗口中选“Maven”,点击“Next”,按提示设置项目坐标等信息后完成创建。

2025-05-07 08:16:31 455

原创 VM+CentOS虚拟机

在“选择客户机操作系统”中,选择“Linux”,版本选择对应的CentOS版本(如CentOS 7 64位),点击“下一步”。- 在“软件选择”中,选择合适的安装环境,如“最小安装”或“带GUI的服务器”等,然后点击“完成”。- 在“安装位置”中,选择磁盘进行分区(可选择自动分区或手动分区),点击“完成”。- 在“安装客户机操作系统”步骤中,选择“稍后安装操作系统”,点击“下一步”。- 选择安装语言,如“English”或“简体中文”,点击“继续”。- 为虚拟机命名并选择存储位置,点击“下一步”。

2025-05-07 08:15:19 340

原创 mapreduce的工作原理

例如,在单词计数中,输入文本“hello world hello hadoop”,Map函数可能会输出<"hello", 1>、<"world", 1>、<"hello", 1>、<"hadoop", 1>。MapReduce通过将大规模数据处理任务分解为Map和Reduce两个简单的操作,并利用集群中多个节点的计算能力并行处理数据,实现了对海量数据的高效处理。- 输入数据被分割成多个数据块,每个数据块通常大小为64MB或128MB,这些数据块分布在Hadoop分布式文件系统(HDFS)的不同节点上。

2025-05-07 08:14:14 194

原创 Linux打开文件创建文件

以 nano 为例,输入 nano newfile.txt ,这会打开 nano 编辑器,如果文件不存在则创建一个新文件。使用 vi 时,输入 vi newfile.txt 进入编辑模式,按 i 键进入插入模式输入内容,完成后按 Esc 键退出插入模式,再输入 :wq 保存并退出,文件就创建好了。2. 使用 cat 命令: cat 命令用于查看文件内容,输入 cat filename ( filename 是文件名),文件内容会直接显示在终端上,但不能编辑。

2025-05-07 08:13:17 443

原创 如何搭建spark yarn 模式的集群

进入Spark的 conf 目录,复制 spark-env.sh.template 为 spark-env.sh ,编辑该文件,设置 SPARK_DIST_CLASSPATH 等环境变量。- 启动Hadoop集群,在Master节点执行 start-dfs.sh 和 start-yarn.sh。- 配置 hdfs-site.xml ,设置HDFS相关参数,如 dfs.replication。- 编辑 core-site.xml ,配置Hadoop核心参数,如 fs.defaultFS。

2025-05-07 08:11:55 200

原创 Spark--基本介绍

速度快:基于内存计算,能将数据缓存于内存,避免重复读取磁盘,同时采用DAG(有向无环图)调度执行引擎,优化任务执行流程,提升处理速度。- 通用性强:提供了全面的大数据处理功能,涵盖批处理、交互式查询、实时流处理、机器学习、图计算等,可统一处理多种类型的大数据应用场景。- 易用性高:支持多种编程语言,如Scala、Java、Python和R等,提供丰富的API,方便开发者进行数据处理和分析。- MLlib:机器学习库,提供了各种机器学习算法和工具,如分类、回归、聚类、协同过滤等,方便进行数据挖掘和分析。

2025-05-07 08:11:01 223

原创 流量统计--Maven依赖

2. Servlet容器相关依赖:如果是Web项目, javax.servlet-api 可以帮助你在Servlet过滤器中获取请求和响应信息,从而统计流量。4. JSON处理库:如 Jackson 或 Gson ,用于处理和解析与流量统计相关的JSON数据。1. 日志框架:如 logback 或 log4j2 ,通过记录请求和响应信息来间接辅助流量统计。你可以根据具体的流量统计需求,选择合适的依赖添加到你的Maven项目的 pom.xml 文件中。

2025-05-07 08:08:44 281

原创 mapreduce的工作原理

例如,在单词计数的例子中,输入文本被分割成单词,每个单词作为键,值为 1,表示出现一次。归约操作:每个 Reduce 任务会接收来自不同 Map 任务的相同键的中间结果,Reduce 函数会对这些结果进行合并和处理,最终生成最终的输出结果 <output_key, output_value>。MapReduce 主要由两个阶段组成:Map 阶段和 Reduce 阶段,此外还有一些辅助步骤,整体流程包括输入数据、Map 任务、Shuffle 和 Sort(洗牌与排序)、Reduce 任务、输出结果。

2025-04-18 15:42:55 272

原创 Hadoop的序列化

序列化的时候,它会自动被调用,将一个内存中的对象,序列化成为一个字节序列。如果序列化的属性不是Hadoop的序列化类型,就要调用相应的方法把它进行序列化。Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,Header,继承体系等),不便于在网络中高效传输。下面我们来看一个例子:通过代码来定义一个类,并创建它的一个对象,把这个对象保存到文件中(序列化),然后再写代码读取这个文件并还原回来。(五)hadoop的序列化。

2025-04-18 15:39:19 284

原创 如何配置HADOOP_HOME环境变量

生命周期:Maven 定义了一套标准的项目构建生命周期,主要包括 `clean`、`default` 和 `site` 三个生命周期。每个生命周期由多个阶段(phase)组成,例如 `default` 生命周期包含 `compile`、`test`、`package`、`install`、`deploy` 等阶段。Maven 可以帮助你管理这些依赖项,你只需在项目的 `pom.xml` 文件中声明所需的依赖,Maven 就会自动从远程仓库下载这些依赖项,并将其添加到项目的类路径中。

2025-04-18 15:38:20 358

原创 教你如何创建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-04-18 15:35:48 366

原创 教你了解数据压缩

有损压缩则会在一定程度上牺牲数据的精度来换取更高的压缩比,适用于对数据质量损失有一定容忍度的场景,如图像、音频、视频等多媒体数据。即使你的MapReduce的输入输出文件都是未压缩的文件,你仍然可以对Map任务的中间结果输出做压缩,因为它要写在硬盘并且通过网络传输到Reduce节点,对其压缩可以提高很多性能,这些工作只要设置两个属性即可,我们来看下代码怎么设置。数据压缩是指在不丢失或尽可能少丢失数据信息的前提下,通过特定的算法和技术,对原始数据进行重新编码和处理,以减少数据存储空间或传输带宽的过程。

2025-04-18 15:34:40 318

原创 一分钟教你学会流量统计

但是,这里有一个问题:map和reduce这两个函数都是通过key,value的方式来进行数据交互的,这里的key可以设置为手机号,而value值就比较复杂,它有两个信息:上行流量和下行流量要统计。而这就必然引出一个新的问题:因为key,value是需要进行磁盘的读写的,所以它们必须要能序列化,如果我们创建一个新的类来描述流量数据,就必须也实现序列化。我们有一份统计数据,这个数据是关于手机号消耗流量的情况,需求统计每一个手机号耗费的总上行流量、总下行流量、总流量。

2025-04-18 15:33:31 670

原创 一分钟教你学会Yarn

通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源, 这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度是采用的是先进先出(FIFO)策略。但是实际中,资源是有限的,并且在繁忙的群集上, 应用程序通常将需要等待其某些请求得到满足。现在,如果B用户在其他作业仍在运行时开始第二个作业,它将与B的另一个作业共享其资源,因此B的每个作业将拥有资源的四分之一,而A的继续将拥有一半的资源。

2025-04-18 15:31:52 294

原创 linux常见操作命令

mv :移动或重命名文件或目录, mv oldname.txt newname.txt (重命名文件), mv file.txt /new/location (移动文件)。- rm :删除文件或目录, rm file.txt (删除file.txt文件), rm -r directory (递归删除directory目录及其内容)。- cp :复制文件或目录, cp file.txt /new/directory (将file.txt复制到/new/directory目录)。

2025-03-03 19:31:49 435

原创 vi常见操作命令

复制粘贴: yy (复制光标所在行);nyy (复制从光标所在行开始的n行,n为数字);p (在光标所在行的下方粘贴已复制的内容);P (在光标所在行的上方粘贴已复制的内容)。- 移动光标: h (向左)、 j (向下)、 k (向上)、 l (向右);ndd (删除从光标所在行开始的n行,n为数字)。- o :在光标所在行的下方新建一行并进入插入模式。- O :在光标所在行的上方新建一行并进入插入模式。- I :在光标所在行的行首插入文本。- A :在光标所在行的行尾插入文本。

2025-03-03 19:30:40 187

原创 虚拟机IP配置

2. 配置虚拟机静态IP:在CentOS虚拟机中,打开终端,输入 vim /etc/sysconfig/network-scripts/ifcfg-ens33 编辑配置文件,将 BOOTPROTO 的值改为 static , ONBOOT 的值改为 yes ,并添加或修改 IPADDR (静态IP地址)、 NETMASK (子网掩码)、 GATEWAY (网关)、 DNS1 和 DNS2 (域名解析服务器地址)。

2025-03-03 19:29:14 363

原创 vm+centos虚拟机

2. 创建新虚拟机:打开VMware Workstation Pro,点击“创建新的虚拟机”,在向导中选“典型(推荐)”,点击“下一步”;选择“Linux”及对应的CentOS版本,点击“下一步”。7. 安装CentOS:启动虚拟机,进入安装界面,选择安装语言,点击“继续”;在安装信息摘要界面,设置“安装位置”“软件选择”等选项,设置完点击“开始安装”;4. 选择安装位置:可选择默认位置,也可点击“更改”选择其他路径,再点击“下一步”。7. 开始安装:确认安装信息无误后,点击“安装”,等待安装完成。

2025-03-03 19:27:18 400

原创 如何安装配置虚拟机

获取适用于目标平台(这里是 x86_64 架构下的 CentOS 版本)的操作系统 ISO 文件作为安装介质。对于新建好的虚拟机来说,合理的硬件资源配置至关重要。成功安装,在应用程序中启动它来创建新的虚拟机。通过点击“新建”按钮开始创建流程,并根据提示逐步设定新虚拟机的各项参数,如操作系统类型、版本以及命名等信息。的虚拟机,首先需要安装 VM VirtualBox 软件。该软件的安装过程较为简单,只需选择合适的安装路径并依次确认即可。来继续执行安装任务。当一切就绪之后,便可以正式启动虚拟机内的安装进程了。

2025-02-21 08:33:50 342

原创 Scala定义函数方法

匿名函数(lambda函数)的定义形式为 (参数列表) => 函数体。例如: val addFunction = (x: Int, y: Int) => x + y。- 若函数体副作用(比如只是打印输出,没有返回有意义的值),返回类型通常为 Unit。- 对于没有参数的函数,定义时参数列表为空括号。在Scala中,可以使用多种方式定义函数和方法。- 函数可以独立存在,不需要依附于类或对象。- 方法是类或对象的一部分。- 也可以定义具名函数。

2024-12-11 21:27:54 264

原创 使用 Maven 来构建 Scala

在命令行中运行 mvn archetype:generate -DgroupId=com.example -DartifactId=my -scala - project -DarchetypeArtifactId=maven - archetype - quickstart -DinteractiveMode=false ,将 com.example 和 my - scala - project 替换为你自己的groupId和artifactId。- 更改项目的依赖管理部分,以包含Scala标准库。

2024-12-11 21:27:00 923

原创 Scala的泛型

/ getMiddleEle(List(1,2,3,4,5)) ==> 5/2 = 2 ==> 下标为2的元素是:3。// getMiddleEle(List(1,2,3,4)) ==> 4/2 = 2 ==> 下标为2的元素是:3。// List[Int]:List是列表,[Int] 是说列表中的每一个元素都是int!// 类型参数 -----泛型(数据类型是变化的)// 用它来获取当前的列表的中间位置上的值。// 中间位置的下标 = 长度/2。// (1) 可以有多个。

2024-12-11 21:26:00 244

原创 Scala的隐式对象

例如,有一个 Animal 类和一个 Food 类, Animal 类有一个 eat 方法,接受 Food 类型的对象。- 隐式转换函数是定义在作用域内的方法,编译器在需要的时候会自动调用这个函数来进行类型转换。在这里,编译器发现需要将 Double 类型的 num 转换为 Int 类型,它会在作用域内查找能进行这种转换的隐式转换函数,然后自动调用 doubleToInt 函数进行转换。- 隐式转换可能会使代码变得难以理解,所以应该谨慎使用,避免过度复杂的隐式转换逻辑。2. 隐式转换的使用场景。

2024-12-11 21:24:45 494

原创 scala正则表达式的第三个应用场景

例如,假设有一个Web服务器日志文件,每行记录的格式大致为: [时间戳] [客户端IP] [请求方法] [请求路径] [状态码]。可以通过这样的正则表达式快速解析日志文件中的每一行,获取关键信息,用于后续的分析,如统计不同状态码出现的频率、不同请求路径的热度等。正则表达式可以用于清洗这些数据。例如,有一个包含字符串数据的列表,其中一些字符串包含多余的空格或非数字字符,需要提取其中的数字部分并转换为整数。println(s"请求方法:$method")println(s"请求路径:$path")

2024-12-11 13:23:23 341

原创 scala中正则表达式的第二个应用场景

println(s"$phone1是有效的手机号码格式")println(s"$phone1是无效的手机号码格式")println(s"$phone2是有效的手机号码格式")println(s"$phone2是无效的手机号码格式")println(s"$email1是有效的邮箱格式")println(s"$email1是无效的邮箱格式")println(s"$email2是有效的邮箱格式")println(s"$email2是无效的邮箱格式")

2024-12-11 13:22:14 621

原创 Scala的正则表达式

正则表达式中的括号可以用于分组,在Scala中可以通过 match 方法获取分组后的内容。- 匹配单个字符串:使用 findFirstIn 方法可以在一个字符串中查找第一个匹配正则表达式的子串。这里 """\d+""" 是正则表达式的字符串形式, r 方法将其转换为 Regex 对象。- 匹配所有字符串:使用 findAllIn 方法可以找到所有匹配的子串,返回一个迭代器。在Scala中,使用正则表达式可以方便地对文本进行匹配、查找和替换等操作。1. 定义正则表达式。

2024-12-11 13:19:55 534

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除