- 博客(37)
- 收藏
- 关注
原创 深入剖析MapReduce工作原理
例如,在一个统计单词出现次数的任务中,输入可能是文本中的一行内容(键为行号,值为行文本),Map函数将行文本按单词分割,然后为每个单词生成键值对(键为单词,值为1,表示出现一次)。最终的输出结果会被写入HDFS。例如,所有关于“bigdata”的键值对被分到一个分区,在分区内进行排序,然后如果有Combiner,会对相同单词的计数值进行初步累加。3. Reduce阶段:每个Reduce任务接收一个分区的数据,对每个单词的计数值进行最终累加,得到每个单词在整个数据集中的出现次数,最后将结果写入HDFS。
2025-03-31 19:37:36
508
原创 Hadoop集群常用命令全解析
其中, /path/to/yourjar.jar 是包含MapReduce程序的JAR包路径, com.yourpackage.YourMainClass 是程序的主类, inputpath 和 outputpath 分别是输入和输出路径。掌握这些Hadoop集群常用命令,能极大提高我们对Hadoop集群的管理和运维效率,从文件系统操作到计算任务提交,再到守护进程管理,每一个命令都是我们驾驭大数据集群的有力工具。同样, stop-dfs.sh 和 stop-yarn.sh 可以快速停止所有相关守护进程。
2025-03-31 19:32:14
233
原创 熟练掌握 Linux 常用命令全解析
chown :更改文件或目录的所有者和所属组, chown new_user:new_group file.txt 将 file.txt 的所有者改为 new_user ,所属组改为 new_group。- useradd :添加新用户, useradd new_user 添加名为 new_user 的用户,可通过 -m 选项同时创建用户主目录。- userdel :删除用户, userdel -r old_user 递归删除用户及其主目录。
2025-03-03 19:54:44
463
原创 深入探索Vi编辑器:常用操作命令全解析
2. 分屏操作: :sp 水平分割窗口, :vsp 垂直分割窗口,可在不同窗口编辑同一文件不同部分或不同文件,通过 Ctrl + w 组合键在不同窗口间切换,如 Ctrl + w + h 切换到左边窗口, Ctrl + w + j 切换到下方窗口。若要替换指定行范围的匹配项,如第5 - 10行,输入 :5,10s/old/new/g。1. 查找:在命令模式下,输入 /keyword ,可向下查找“keyword”,按 n 键查找下一个匹配项,按 N 键向上查找上一个匹配项;
2025-03-03 19:47:32
541
原创 虚拟机IP配置全攻略:一文搞懂不同模式与疑难解决
NAT模式配置:虚拟机设置中选择“网络适配器”为“NAT模式”,无需额外设置。- 桥接模式配置:在VirtualBox主界面,选中虚拟机,点击“设置” - “网络”,将连接方式设为“桥接网卡”,选择主机物理网卡。- 仅主机模式配置:将虚拟机网络适配器设为“仅主机模式”,虚拟机内设置自动获取IP,同样可在虚拟网络编辑器中管理仅主机模式网络参数,如设置子网IP和DHCP范围。- 仅主机模式配置:选择“仅主机网络”,添加仅主机网络后,虚拟机可获取该网络下IP,在虚拟机内设置自动获取或手动设置静态IP。
2025-03-03 19:42:15
1045
原创 开启Spark学习之旅:VMware + CentOS 虚拟机配置指南
5. 命名虚拟机并选择存储位置:为你的虚拟机取一个有意义的名字,如“Spark - CentOS”,并指定虚拟机文件的存储位置。1. VMware Workstation Pro:这是一款功能强大的虚拟机软件,可在其官方网站下载最新版本,根据你的操作系统选择对应的安装包。在“新建虚拟机向导”中,选择“典型(推荐)”配置类型,然后点击“下一步”。4. 客户机操作系统选择:在操作系统列表中,选择“Linux”,版本选择“CentOS 8 64 位”(根据你下载的镜像版本选择)。(二). 系统要求。
2025-03-03 19:37:04
811
原创 Scala隐式转换的相关练习题
创建一个隐式转换,将 Person 对象转换为 Student 对象,其中 studentId 可以是 Person 对象 name 的哈希值, grade 可以设为固定值(如1)。定义一个隐式转换,将 String 类型转换为 Int 类型(转换规则是将字符串解析为整数),使得可以使用 Calculator 的 add 方法直接对两个 String 进行相加操作。- 定义一个隐式转换,将 Double 类型转换为 Int 类型,转换规则是直接截断小数部分(即向下取整)。二、自定义类的隐式转换。
2024-12-12 00:22:43
401
原创 Scala的隐式对象
在这里, doSomething 函数有一个隐式参数 logger ,编译器会自动查找匹配类型( Logger )的隐式对象( ConsoleLogger )作为参数传入函数。- 在Scala中,隐式对象是一种特殊的对象,它主要用于隐式转换和提供隐式参数。- 不过这种隐式转换可能会使代码的可读性变差,并且如果存在多个可能的隐式转换,编译器可能会出现困惑。- 当编译器发现代码中类型不匹配,但存在合适的隐式转换时,就会自动应用隐式对象进行转换。- 隐式对象也可以用于提供隐式参数。
2024-12-12 00:17:31
398
原创 在Scala中,如何对Vector中的元素进行排序?
这个比较函数接收两个参数(在这里是 Vector 中的两个元素),通过返回布尔值来决定两个元素的顺序。所以 vector.sortWith(_.length < _.length) 会根据字符串长度对 vector 中的元素进行排序,得到一个新的 Vector。- sorted 方法会返回一个新的 Vector ,其元素按照自然顺序(对于数字是从小到大,对于字符是字典序等)进行排列。这里的 vector.sorted 会对 vector 中的整数元素进行排序,得到一个新的排好序的 Vector。
2024-12-12 00:09:16
145
原创 Scala的Vector概述
例如, val vector1 = Vector(1, 2) , val vector2 = Vector(3, 4) , val combined = vector1 ++ vector2 会得到 Vector(1, 2, 3, 4)。例如, val numbers = Vector(1, 2, 3) , val squared = numbers.map(n => n * n) 会得到 Vector(1, 4, 9)。- 随机访问:对 Vector 中元素的随机访问时间复杂度接近常数时间O(1)。
2024-12-12 00:04:15
315
原创 如何在Scala中遍历List?
如果是,就通过 list(index) 获取并打印当前索引对应的元素,然后将 index 的值增加1,继续下一次循环,直到遍历完整个 List。- for 循环的语法 element <- list 表示从 List 中取出每个元素赋值给 element ,然后在循环体 {} 内可以对 element 进行操作,这里是打印每个元素。- 也可以使用更简洁的匿名函数写法,如 list.foreach(println) ,这种方式省略了参数名,因为 println 本身就是一个接收一个参数并打印它的函数。
2024-12-12 00:00:28
421
原创 Scala的List概述
例如, val list1 = List(1, 2) , val list2 = List(3, 4) , val combined = list1 ::: list2 会得到 List(1, 2, 3, 4)。例如对于 List(1, 2, 3) , head 是1, tail 是 List(2, 3)。例如, val numbers = List(1, 2, 3) , val squared = numbers.map(n => n * n) 会得到 List(1, 4, 9)。
2024-12-11 23:47:38
325
原创 Scala的Seq之Array和ArrayBuffer集合
在需要频繁修改元素或者改变集合长度的场景下, ArrayBuffer 比 Array 更灵活,因为它的可变性质使得这些操作更加方便高效,不过在多线程环境下,如果没有适当的同步机制,对 ArrayBuffer 的并发修改可能会导致数据不一致等问题。- 删除元素:可以使用 -= 操作符删除单个元素,如 arrayBuffer -= 4。- 可以使用索引来访问 Array 中的元素,索引从0开始。- 更新元素:可以通过索引直接更新元素,如 arrayBuffer(0) = 10 ,将第一个元素更新为10。
2024-12-11 23:44:45
373
原创 讨论Scala中的不可变序列和可变序列在性能上有哪些区别?
对于可变序列,更新操作(如修改某个元素的值或者添加、删除元素)性能比较好。例如使用 ArrayBuffer 的 update 方法修改元素或者 += 方法添加元素,这些操作是直接在原有数据结构上进行修改,不需要像不可变序列那样创建新的数据结构,时间复杂度可以达到O(1)(添加删除元素在末尾时)或者O(n)(插入删除元素在中间位置时,因为可能涉及元素的移动)。- Vector在随机访问方面性能比较好,它通过树结构实现,对元素的随机访问时间复杂度接近O(1),无论元素在序列的什么位置,访问速度都比较稳定。
2024-12-11 23:37:16
111
原创 Scala的集合
mutable.Map:引入 import scala.collection.mutable.Map 后可以创建,如 val mutableMap = mutable.Map("k1" -> "v1") ,可以通过 mutableMap("k1") = "newV1" 来更新值。- Map:例如 val map = Map("key1" -> "value1", "key2" -> "value2") ,通过 map("key1") 来获取对应的值。- 可变序列(Mutable Sequences)
2024-12-11 23:34:25
347
原创 Scala正则表达式的练习题
// 用于匹配 http:// 或 https:// , [a-zA-Z0-9.]+ 匹配域名部分, (/[a-zA-Z0-9/]+)* 用于匹配路径部分,路径部分可以出现0次或多次。假设网页链接以 http:// 或 https:// 开头,后面跟着域名(包含字母、数字、点)和可能的路径(包含字母、数字、斜杠等)。这里 ([^@]+)@([^@]+) 是正则表达式, ([^@]+) 用于匹配除 @ 之外的一个或多个字符,分别用于提取用户名和域名部分。二、提取邮件地址中的用户名和域名。
2024-12-11 23:22:36
347
原创 Scala之如何解决乘机排名相关的问题
在比较函数中,首先判断里程数是否相同,如果不同,就按照里程数从高到低排序;如果里程数相同,就按照姓名的字典序从小到大排序。方法接受一个比较函数,函数的参数是两个乘客对象。
2024-12-11 23:06:33
324
原创 Scala中map和foreach函数的应用
中的每个元素应用这个匿名函数,在控制台依次输出 1、2、3。中的每个元素应用这个匿名函数,最后得到一个新的列表。是一种更简洁的匿名函数写法,表示对每个字符串调用。是一个匿名函数,它接受一个整数。是一个匿名函数,它接受一个整数。,这个匿名函数没有参数(用。列表,每次执行匿名函数。表示),它的作用是将。
2024-12-11 20:55:53
393
原创 scala函数式编程
Scala 允许函数接收其他函数作为参数或者返回一个函数。比如 map 、 filter 和 reduce 等函数就是高阶函数的例子。纯函数是指没有副作用的函数,即对于相同的输入总是返回相同的输出,并且不会修改外部状态。在 Scala 里,函数可以像普通的值一样被传递、赋值给变量、作为参数传递给其他函数或者从函数中返回。这个 square 函数就是一个纯函数,它只根据输入参数计算并返回结果,不修改任何外部状态。这里的 map 函数接收一个函数作为参数,对列表中的每个元素进行操作。
2024-10-09 22:37:52
279
原创 Scala的汉诺塔游戏步骤
如果只有一个盘子( n == 1 ),直接将盘子从源柱子移动到目标柱子。如果有多个盘子,先将 n - 1 个盘子从源柱子借助目标柱子移动到辅助柱子,然后将第 n 个盘子从源柱子移动到目标柱子,最后再将 n - 1 个盘子从辅助柱子借助源柱子移动到目标柱子。上述代码中, hanoi 函数接收四个参数,分别是盘子的数量 n 、源柱子(初始时所有盘子所在的柱子)、辅助柱子和目标柱子。Hanoi Tower 是一个经典的递归问题。
2024-10-07 20:32:15
273
原创 Scala的函数递归
如果递归深度过大,可能会导致栈溢出错误。所以在实际应用中,对于可能会出现深度递归的情况,需要考虑使用迭代或者其他优化方法来避免栈溢出问题。在使用 Scala 的函数递归时,要确保递归有正确的终止条件,以避免无限递归。在 Scala 中,函数递归是指一个函数在其定义中调用自身的过程。- 可以简洁地解决一些具有递归性质的问题。
2024-10-07 20:29:51
186
原创 Scala 计算一到 n 的偶数和
在上述代码中,我们定义了一个名为 sumEvenNumbers 的方法,它接受一个整数 n 作为参数。在方法内部,我们使用一个循环遍历从 1 到 n 的所有数字。最后,我们返回 sum ,即一到 n 的所有偶数之和。我们的目标是找到一种有效的方法来计算从 1 到 n 这个范围内的所有偶数的总和。偶数是能够被 2 整除的整数,所以我们需要遍历从 1 到 n 的所有数字,判断每个数字是否为偶数,如果是偶数则将其加入总和中。Scala 的简洁语法和强大的功能使得这样的计算变得非常容易。
2024-09-28 23:28:33
261
原创 Scala 中的条件判断:1 小于 2 或者大于 2
最后,我们使用字符串插值的方式输出结果,根据 isTrue 的值决定输出“正确”还是“错误”。在实际编程中,我们经常会遇到各种复杂的条件判断情况,掌握好这些基本的技巧对于编写高效、准确的代码至关重要。Scala中条件判断很重要,今天我们来探讨一个简单但又具有代表性的问题:判断数字 1 是小于 2 或者大于 2,并输出结果是正确还是错误。println(s"1 小于 2 或者大于 2 的结果是:${if (isTrue) "正确" else "错误"}")
2024-09-28 23:25:29
251
原创 Scala的循环结构详解
while 和 do-while 循环适用于简单的重复任务,而 for 循环则在。- break 和 continue 在 Scala 中不是内置的关键字,但可以通过使用递归函数或其他方式来实现类似的效果。- 在这个例子中,只要变量 i 小于 5,循环就会继续执行,每次循环都会输出 i 的值,并将 i 递增。- 这里,代码块先执行一次,然后检查 j 是否小于 5,如果是,则继续循环。- do-while 循环先执行一次代码块,然后在满足条件时继续循环。
2024-09-22 23:43:51
725
原创 Scala的IDEA环境搭建
4. 如果你的系统中已经安装了 Scala,可以选择“Existing local Scala SDK”并指定 Scala 的安装路径;3. 在搜索框中输入“Scala”,选择“Scala”插件并点击“Install”进行安装。1. 在项目中创建一个 Scala 类,可以通过右键点击项目名称,选择“New”->“Scala class”来创建。2. 在弹出的新建项目窗口中,选择“Scala”,然后选择“IDEA”。1. 点击菜单栏中的“File”->“New”->“Project”。
2024-09-18 22:54:57
769
原创 Scala的基本运算
println (i == j) // 输出结果为 true。println (r || s) // 输出结果为 true。println (m > n) // 输出结果为 false。println (g / h) // 输出结果为 5。println (m < n) // 输出结果为 true。println (m >= n) // 输出结果为 false。println (m <= n) // 输出结果为 true。
2024-09-11 23:13:50
769
原创 如何使用优快云完成Scala的lazy变量的惰性求值
1.声明一个lazy变量。2.在首次访问该变量时,触发计算。3.计算结果被存储起来。4.后续对该变量的访问直接使用存储的结果,不再重新计算。例如://scalaobject LazyDemo {// 声明一个 lazy变量**lazy val** lazyValue:Int={println("计算 lazyValue...")42//假设这是一个复杂的计算def main(args:Array[String]):Unit={println("程序开始...”)//在这里 lazyVa
2024-09-04 23:51:39
195
原创 如何快速使用优快云写出HelloWorld
1·创建文件,新建以·Scala后缀的文本文档编写HelloWorld代码2. 打开命令提示符或终端窗口,进入包含这个文件的目录。(cmd)3. 使用 scalac HelloWorld.scala 编译程序。4. 使用 scala HelloWorld 运行程序,你将在控制台看到“Hello, World!”
2024-09-04 23:34:27
150
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人