Spark-Scala语言实战(1)
在之前的文章中,我们学习了如何在Linux安装Spark以及Scala,想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。
Spark及Scala的安装
https://blog.csdn.net/qq_49513817/article/details/136499998?spm=1001.2014.3001.5501
这篇文章,我会从Scala基础开始,带着大家一起实战,一起学习。为了方便,我这边用的是win的Scala。
目录
一、win版Scala下载配置
1.Scala下载
2.环境变量配置
3.启动Scala
二、常量、变量、简单函数
1.定义常量
2.定义变量
3.定义数组
(1 数组
(2 数组操作方法
(3 创建区间数组
三、九九乘法表
拓展
一、Scala数据类型
基本数据类型
复合数据类型
二、Scala运算符
一、win版Scala下载配置
1.Scala下载
Scala官网地址
https://www.scala-lang.org/download/all.html
我这边选用的版本是2.12.15,大家按需下载。


2.环境变量配置




3.启动Scala
桌面win+r,输入cmd

输入scala

出现Scala即成功
二、常量、变量
1.定义常量
在Scala语言中,使用val关键字来定义一个常量(常量:常量是指一旦赋值后就不能再被修改的量)。

可以看到我们使用了val来定义一个常量,其中x1到x4是我们的常量名称,后面是我给它们赋的值,其中,值的数据类型是Scala自此定义的,因此我们也知道了Scala的特点之一(如果不指定变量的类型,Scala会自动生成)。
现在,我们来试试自己定义数据类型

现在,我们定义了一个常量x5,它的值是int类型的666,细心的朋友可能看出来了,我上面有个报错,那是因为Scala语言有严格的书写规范,在这里,Int的i要大写。
val x1=1val x2=1.5val x3=x1+x2val x4=1+1.5val x5:Int=666
2.定义变量
在Scala语言中,使用var关键字来定义一个变量。(变量:变量是用于存储数据的一种引用,可以存储任何类型的数据,如整数、浮点数、字符串、布尔值等,在存储过程中可以发生改变的量。)

和上面的方法很像,就是改变了一个字母而已,快来试试吧
var r1=8var r2=88.8var r3=88.8+8var r4=r1+r2
3.定义数组
(1 数组
在Scala中,定义数组主要有两种方式
第一种:

可以看到,我们定义了两个数组。一个名为sz1,包含了1到5,另一个名为sz2,包含了两个字符串,一个“Hello”,一个“World”
第二种:

使用这种方式,Scala会现在里面赋默认值Null值,也就是空值,再随后并随后给它的三个元素分别赋了值,现在来试试吧
val sz1 = Array(1, 2, 3, 4, 5)val sz2 = Array("Hello", "World")val sz3: Array[String] = new Array[String](3)sz3(0) = "haha"sz3(1) = "hehe"sz3(2) = "heihei"
(2 数组操作方法
| 操作 | 描述 | 示例 |
|---|---|---|
| 创建数组 | 使用Array类创建数组 | val arr = Array(1, 2, 3) |
| 数组长度 | 使用length或size属性获取数组长度 | val length = arr.length |
| 最大值 | 使用max方法获取数组中的最大值 | val maxVal = arr.max |
| 最小值 | 使用min方法获取数组中的最小值 | val minVal = arr.min |
| 排序 | 使用sorted方法对数组进行升序排序 | val sortedArr = arr.sorted |
| 数组连接 | 使用++操作符连接两个数组 | val concatenated = arr1 ++ arr2 |
| 转换为列表 | 使用toList方法将数组转换为列表 | val list = arr.toList |
| 转换为集合 | 使用toSet方法将数组转换为集合(去除重复元素) | val set = arr.toSet |
| 查找元素 | 使用exists方法检查数组是否包含元素x | arr.exists(_ == "x") |
(3 创建区间数组
创建区间数组,只需要使用range()函数,但再此之前,我们先要导入包。

这样,我们就得到了一个1到10,每隔2一次的区间数组
import Array._val sz4 = range(1,10,2)
三、九九乘法表
用Scala完成一个九九乘法表的实现。

其中
object jjcfb 定义一个名为jjcfb的类函数
def nb() = 定义名为nb的函数
for (i <- 1 to 9)
for (j <- 1 to i) 嵌套遍历循环
print(s"$j*$i=${i*j}\t") 输出i*j的值,并对齐输出\t制表符
println() //每行结束后换行
object jjcfb {def nb() = {for (i <- 1 to 9) {for (j <- 1 to i) {print(s"$j*$i=${i*j}\t")}println()}}}
拓展
一、Scala数据类型
基本数据类型
Byte: 8 位有符号整数Short: 16 位有符号整数Int: 32 位有符号整数Long: 64 位有符号整数Float: 32 位 IEEE 754 单精度浮点数Double: 64 位 IEEE 754 双精度浮点数Char: 16 位 Unicode 字符Boolean: 逻辑值,可以是true或falseUnit: 表示没有具体的值,类似于 Java 中的void(但Unit有一个唯一的实例值())Nothing: 是所有其他类型的子类型,没有实例Null:null值的类型,是Nothing的一个实例
复合数据类型
- 元组(Tuples): 元组是不同类型值的集合。例如,
(1, "hello")是一个包含整数和字符串的二元组。 - 数组(Arrays): 类似于 Java 中的数组,用于存储同类型的对象集合。
- 列表(Lists): 可变长度的有序元素集合。Scala 中的列表是不可变的,但可以通过操作生成新的列表。
- 集合(Sets): 无序且不包含重复元素的集合。
- 映射(Maps): 存储键值对的集合,其中键是唯一的。
- 字符串(Strings): 字符序列。Scala 中的字符串是不可变的。
二、Scala运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
| 算术运算符 | 用于执行基本的数学运算 | |
| + | 加法 | val peng = 5 + 3 |
| - | 减法 | val peng = 5 - 3 |
| * | 乘法 | val peng = 5 * 3 |
| / | 除法 | val peng = 5 / 3 |
| % | 取模(求余数) | val peng = 5 % 3 |
| 关系运算符(比较运算符) | 用于比较两个值 | |
| == | 等于 | val peng = 5 == 3 |
| != | 不等于 | val peng = 5 != 3 |
| > | 大于 | val peng = 5 > 3 |
| < | 小于 | val peng = 5 < 3 |
| >= | 大于或等于 | val peng = 5 >= 3 |
| <= | 小于或等于 | val peng = 5 <= 3 |
| 逻辑运算符 | 用于组合或否定关系表达式 | |
| && | 逻辑与 | val peng = (5 > 3) && (2 < 4) |
| ! | 逻辑非 | val peng = !(5 < 3) |
| 赋值运算符 | 用于将值赋给变量 | |
| = | 赋值 | var x = 5 |
| += | 加法赋值 | var x = 3; x += 2 |
| -= | 减法赋值 | var x = 5; x -= 3 |
| *= | 乘法赋值 | var x = 2; x *= 3 |
| /= | 除法赋值 | var x = 10; x /= 2 |
| 位运算符 | 对整数的位进行操作 | |
| & | 位与 | val peng = 5 & 3 |
| 位或 | ||
| ^ | 位异或 | val peng = 5 ^ 3 |
| ~ | 位非 | val peng = ~5 |
| << | 左移 | val peng = 5 << 1 |
| >> | 右移 | val peng = 5 >> 1 |
相关文章:
Spark-Scala语言实战(1)
在之前的文章中,我们学习了如何在Linux安装Spark以及Scala,想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark及Scala的安装https:/…...
NBlog Java定时任务-备份MySQL数据
NBlog部署维护流程记录(持续更新):https://blog.csdn.net/qq_43349112/article/details/136129806 为了避免服务器被攻击,给博客添加了一个MySQL数据备份功能。 此功能是配合博客写的,有些方法直接用的已有的…...
微信小程序项目实战遇到的问题
我们以学生成绩平台来作为例子。这是我们想得到的效果。 以下是完整代码: index.js // index.js Page({//页面的初始数据data: {hello: 欢迎进入微信小程序的编程世界,score: 80,userArray: [{name: 张三,score: [66, 77, 86, 70, 90]},{name: 李四,score: [88, 7…...
网络原理(3)——TCP协议
目录 一、连接管理 二、三次握手 1、何为三次握手? 2、三次握手有何意义? 三、四次挥手 三次握手和四次挥手的相似之处和不同之处 (1)相似之处 (2)不同之处 四、TCP的状态 建立连接: 断开…...
nginx多级代理配置获取客户端真实ip
流量路径 #mermaid-svg-NX785p8k6RVBngHY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NX785p8k6RVBngHY .error-icon{fill:#552222;}#mermaid-svg-NX785p8k6RVBngHY .error-text{fill:#552222;stroke:#552222;}#…...
Django框架的全面指南:从入门到高级【第128篇—Django框架】
👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Django框架的全面指南:从入门到高级 Django是一个高效、功能强大的Python Web框…...
C++类和对象基础
目录 类的认识 访问限定符:public(公有),protected(保护),private(私有)。 类的两种定义方式: 类的实例化: 封装: 类的对象大小的计算: 类成员函数的this指针: C语言是面向过程的语言&am…...
消息队列常见的两种消费模式
一、点对点模式 点对点模式:生产者发送消息到消息队列,消费者从消息队列中接收、处理消息,消息被消费后,就不在消息队列中了。每个消息只能由一个消费者接收和处理。如果有多个消费者监听同一个队列,消息将被发送到其…...
php的伪协议详解
在 PHP 中,伪协议(pseudo-protocols)是一种特殊的语法,用于访问各种资源,如文件、网络、输入/输出流等。伪协议实际上并不是真正的协议,而是一种简便的语法,用于访问不同的资源类型。 以下是一…...
【研发日记】Matlab/Simulink技能解锁(四)——在Simulink Debugger窗口调试
文章目录 前言 Block断点 分解Block步进 Watch Data Value 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 见《【研发日记】Matlab/Simulink技能解锁(二)——在Function编辑窗口Debug》 见《【研发日记】Matlab/Simul…...
沪深主板打板胜率统计
统计了20100101以来的数据,以中信日K为数据来源。 计算方法: 选出每只股票 (收盘价-开盘价)/开盘价 >0.098的日期,然后往后取3天数据,如果3天内有一天能涨超0.2元,则认为打板成功。 总共打板: 52239次 胜: 43784次…...
Python中的列表推导式(List Comprehension)
Python中的列表推导式(List Comprehension)是一种强大且简洁的语法结构,用于快速创建列表。它通过一行代码就能完成原本需要多行代码才能实现的循环迭代与列表添加操作。列表推导式在Python中非常常用,它使得代码更加简洁、易读和…...
MusicHiFi: Fast High-Fidelity Stereo Vocoding
MusicHiFi: Fast High-Fidelity Stereo Vocoding 相关链接:arxiv github 关键字:音乐生成、高保真立体声、立体声编解码器、生成对抗网络、频带扩展 摘要 MusicHiFi是一种高效的高保真立体声编解码器,它通过将低分辨率的mel频谱图转换为音频…...
完美解决 RabbitMQ可视化界面Overview不显示折线图和队列不显示Messages
问题场景: 今天使用docker部署了一个RabbitMQ,浏览器打开15672可视化页面发送消息后不显示Overview中的折线图,还有队列中的Messages,因为我要看队列中的消息数量。 解决方案: 进入容器内部 docker exec -it 容器id…...
matlab 混沌系统李雅普洛夫指数谱相图分岔图和庞加莱界面
1、内容简介 略 65-可以交流、咨询、答疑 2、内容说明 matlab 混沌系统李雅普洛夫指数谱相图分岔图和庞加莱界面 混沌系统李雅普洛夫指数谱相图分岔图和庞加莱界面 李雅普洛夫指数谱、相图、分岔图、庞加莱界面 3、仿真分析 略 4、参考论文 略...
Linux-docker安装数据库mysql
1、拉去mysql镜像: docker pull mysql2、创建容器挂载路径 mkdir -p /usr/local/jiuxiang/mysql/data # 数据存储位置 mkdir -p /usr/local/jiuxiang/mysql/logs # 日志存储位置 mkdir -p /usr/local/jiuxiang/mysql/conf # 配置文件3、启动容器 docker run -…...
网工内推 | 七险一金,上市公司招信息安全工程师,大牛带队
01 启明星辰信息技术集团股份有限公司 招聘岗位:数据安全服务工程师 职责描述: 1、负责数据安全服务项目的管理,统筹组织并协调资源落实项目交付实施; 3、负责数据安全风险评估、数据分类分级、数据安全管理制度、数据安全体系规划等数据安…...
04.组件的组成和组件间通信
一、scoped解决样式冲突 1.默认情况: 写在组件中的样式会 全局生效 → 因此很容易造成多个组件之间的样式冲突问题。 全局样式: 默认组件中的样式会作用到全局,任何一个组件中都会受到此样式的影响 局部样式: 可以给组件加上scoped 属性,可以让样式只…...
【Sql Server】通过Sql语句批量处理数据,使用变量且遍历数据进行逻辑处理
欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…...
MySQL中group_concat()用法
函数用法见链接处 https://www.cnblogs.com/mcj123/articles/17189384.html 使用过程问题:group_concat()拼接后的字符串长度默认限制为1024位字节,超长会被自动截取。 解决: 修改group_concat限制长度。 1.数据库直接通过sql修改 查询限制长…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
