当前位置: 首页 > news >正文

Day10 —— 大数据技术之Scala

Scala编程入门

    • Scala的概述
      • 什么是Scala?
      • Scala的重要特点
      • Scala的使用场景
    • Scala的安装
    • Scala基础
    • Scala总结

Scala的概述

什么是Scala?

Scala是一种将面向对象和函数式编程结合在一起的高级语言,旨在以简洁、优雅和类型安全的方式表达通用编程模式。Scala功能强大,不仅可以编写简单脚本,还可以构建大型系统。
Scala运行于Java平台,Scala程序会通过JVM被编译成class字节码文件,然后在操作系统上运行。其运行时候的性能通常与Java程序不分上下,并且Scala代码可以调用Java方法、继承Java类、实现Java接口等,几乎所有Scala代码都大量使用了Java类库。

Scala的重要特点

  • 多范式编程:

    Scala支持多种编程范式,包括面向对象编程(OOP)和函数式编程(FP),使得开发人员可以根据需要选择合适的编程风格。

  • 静态类型系统:

    Scala是一种静态类型语言,它在编译时进行类型检查,有助于提高代码的稳定性和可靠性。

  • 运行于Java虚拟机(JVM):

    Scala代码被编译为字节码,可以在Java虚拟机(JVM)上运行,与现有的Java库和框架很好地集成。

  • 函数式编程支持:

    Scala提供了丰富的函数式编程特性,如不可变性、高阶函数、模式匹配等,使得编写函数式风格的代码变得更加简洁和灵活。

  • 并发编程支持:

    Scala提供了Actor模型和并发库,使得编写并发程序变得更加简单和安全。

Scala的使用场景

  • 大数据处理:

    Scala在大数据处理领域得到广泛应用,特别是在Apache Spark等大数据处理框架中。Scala的静态类型系统和函数式编程特性使其成为处理大规模数据集的理想选择。

  • 并发编程:

    Scala的Actor模型和并发库使得编写并发程序变得更加简单和安全。因此,Scala在需要处理并发任务的应用程序中表现出色。

  • 函数式编程:

    支持高阶函数和不可变数据结构,适用于并发和并行编程。

Scala的安装

下载和安装Java: Scala运行在JVM上,所以首先确保安装了JDK。

下载地址:https://www.oracle.com/java/technologies/javase-jdk15-downloads.html

使用的Scala版本为2.12.7,要求JDK版本为1.8

下载Scala(Windows): 下载Windows安装包scala-2.12.7.msi

下载地址:https://www.scala-lang.org/download/

配置环境变量

变量名:SCALA_HOME
变量值:C:\Program Files (x86)\scala
变量名:Path
变量值:%SCALA_HOME%\bin

测试是否安装成功

CMD中执行scala -version命令

下载Scala(CentOS7): 下载Linux安装包scala-2.12.7.tgz

下载地址:https://www.scala-lang.org/download/

解压到指定目录:

$ tar -zxvf scala-2.12.7.tgz -C /opt/modules/

配置环境变量

export SCALA_HOME=/opt/modules/scala-2.12.7/
export PATH=$ PATH:$ SCALA_HOME/bin

测试是否安装成功

在命令行窗口执行scala -version命令

启动scala

直接在终端输入scala命令

Scala基础

变量声明

Scala中变量的声明使用关键字val和var。

声明一个val字符串变量str:
scala> val str=“hello scala”
str: String = hello scala

声明变量时指定数据类型:
scala> val str:String=“hello scala”
str: String = hello scala

将多个变量放在一起进行声明:
scala> val x,y=“hello scala”
x: String = hello scala
y: String = hello scala

基本数据类型

Scala 拥有与 Java 类似的基本数据类型,包括 Int、Double、Boolean 等。

val number: Int = 42
val pi: Double = 3.14
val isScalaFun: Boolean = true

表达式

Scala中常用的表达式主要有条件表达式和块表达式。

条件表达式
条件表达式主要是含有if/else的语句块:
scala> val i=1
i: Int = 1
scala> val result=if(i>0) 100 else -100
result: Int = 100
也可以在一个表达式中进行多次判断:
scala> val result=if(i>0) 100 else if(i==0) 50 else 10
result: Int = 100

块表达式
块表达式为包含在符号{}中的语句块:
scala> val result={
| val a=10
| val b=10
| a+b
| }
result: Int = 20

函数定义

Scala 支持多种定义函数的方式,包括匿名函数和高阶函数。

def add(a: Int, b: Int): Int = a + b
val multiply = (x: Int, y: Int) => x * y
def applyFunction(f: (Int, Int) => Int, x: Int, y: Int): Int = f(x, y)

类与对象

Scala 是完全面向对象的,每个值都是一个对象。类的定义如下:

class Person(val name: String, var age: Int) {
def greet(): String = s"Hello, my name is $name and I am $age years old."
}
val alice = new Person(“Alice”, 25)
println(alice.greet())

高阶函数和集合

Scala集合提供的高阶函数(例如map, filter, reduce等)非常适合处理集合数据。

val numbers = List(1, 2, 3, 4, 5)
val doubled = numbers.map(_ * 2) // List(2, 4, 6, 8, 10)
val filtered = numbers.filter(_ % 2 == 0) // List(2, 4)

样例类和模式匹配

样例类和模式匹配是Scala中的特色功能,它们主要用于处理不可变数据。

// 定义样例类
case class User(name: String, age: Int)
val user = User(“Bob”, 25)
val greeting = user match {
case User(name, age) if age > 20 => s"Hello, $name! You are already $age."
case User(name, age) => s"Hello, $name! You are $age."
}
println(greeting)

Scala总结

Scala是一种多范式编程语言,结合了面向对象和函数式编程的特性。其静态类型系统、强大的并发编程支持和运行于JVM的特点使其成为一种灵活、表达力强的语言。Scala具有高度的互操作性,可以与现有的Java代码无缝集成。通过类型推断、模式匹配等功能,Scala能够提高开发效率并减少代码量。总体而言,Scala适合于需要高并发、复杂数据处理和清晰表达意图的应用程序开发。

相关文章:

Day10 —— 大数据技术之Scala

Scala编程入门 Scala的概述什么是Scala?Scala的重要特点Scala的使用场景 Scala的安装Scala基础Scala总结 Scala的概述 什么是Scala? Scala是一种将面向对象和函数式编程结合在一起的高级语言,旨在以简洁、优雅和类型安全的方式表达通用编程…...

Linux应用系统快速部署:docker快速部署linux应用程序

目录 一、背景 (一)引入docker的起因 (二)docker介绍 (三)Docker部署的优势 1、轻量级和可移植性 2、快速部署和扩展 3、一致性 4、版本控制 5、安全性 6、资源隔离 7、简化团队协作 8、多容器…...

三目运算符中间的表达式可以省略吗(a?:c)?

熟悉C语言的童靴对三目运算符都非常熟悉,a? b : c; 如果a为true,则整个运算符的值为b,否则为c;那么问题来了,三目运算符中间的表达式可以省略吗?即a? : c; 1、linux内核中出现的省略情况 本人在阅读内核代码是发现了下面的代码: preferr…...

android 彩虹进度条自定义view实现

实现一个彩虹色进度条功能,不说明具体用途大家应该能猜到。想找别人造的轮子,但是没有合适的,所以决定自己实现一个。 相关知识 android 自定义view LinearGradient 线性渐变 实现步骤 自定义view 自定义一个TmcView类继承View 重写两…...

免费一年SSL证书申请——建议收藏

免费一年SSL证书申请——建议收藏 获取免费一年期SSL证书其实挺简单的 准备你的网站: 确保你的网站已经有了域名,而且这个域名已经指向你的服务器。还要检查你的服务器支持HTTPS,也就是443端口要打开,这是HTTPS默认用的。 验证域…...

【docker1】指令,docker-compose,Dockerfile

文章目录 1.pull/image,run/ps(进程),exec/commit2.save/load:docker save 镜像id,不是容器id3.docker-compose:多容器:宿主机(eth0网卡)安装docker会生成一…...

Flutter中的异步和多进程

Flutter 是一个用于创建高性能、高保真度移动应用的框架,它使用 Dart 编程语言。 在 Flutter 中,异步和多进程是两种不同的概念,用于解决不同的问题。 异步 (Asynchronous) 异步编程是一种编程范式,允许代码在等待操作完成(如网络请求、文件 I/O)时继续执行其他任务,而不…...

学习C++第二天

1.缺省参数 缺省参数的概念&#xff1a; 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void show(int a 10) {cout << a << endl; }int main() {sho…...

解析Java中1000个常用类:AbstractSet类,你学会了吗?

推荐一个我自己写的小报童专栏导航网站: http://xbt100.top 收录了生财有术项目精选、AI海外赚钱、纯银的产品分析等专栏,陆续会收录更多的专栏,欢迎体验~复制URL可直达。 以下是正文。 在 Java 集合框架中,AbstractSet 是一个重要的抽象类,为实现自定义的集合(Set)提…...

Nginx基础概念和常用操作

文章目录 1. 安装、启动、连接2. 快速尝试部署网站3. 配置文件1. nginx.conf全局配置事件模块HTTP 模块性能优化建议 2. default.confserver 块基本设置日志设置根路径设置 4. 反向代理1. 模拟3个Web2. 链接 5. 负载均衡1. 加权轮询&#xff0c;Weighted Round Robin2. 最少连接…...

圈复杂度是什么?go语言调整圈复杂度举例

圈复杂度&#xff08;也称为循环复杂度或McCabe复杂度&#xff09;是衡量程序复杂性的一个指标&#xff0c;它通常与代码中的控制流结构&#xff08;如条件语句、循环和函数调用&#xff09;的数量相关。在Go语言中&#xff0c;你可以通过重构代码来降低圈复杂度&#xff0c;从…...

设计模式4-模版方法

设计模式 重构获得模式重构的关键技法1. 静态转动态2. 早绑定转晚绑定3. 继承转组合4. 编译时依赖转运行时依赖5. 紧耦合转松耦合 组件协助动机模式定义结构 要点总结。 例子示例解释&#xff1a; 重构获得模式 设计模式的目的是应对变化&#xff0c;提高复用 设计模式的要点…...

yii2 ActiveForm使用技巧

持续更新&#xff1a; 1、搜索输入框&#xff1a;form-inline <?php $form ActiveForm::begin([action > [index],method > get,options > [class > form-inline] &#xff08;增加此行代码&#xff09; ]); ?>...

【面试】基本数据类型的包装类缓存

目录 1. 说明2. Integer类分析2.1 代码块2.2 字节码2.3 分析2.4 valueOf方法 1. 说明 1.在java中&#xff0c;基本数据类型的包装类&#xff08;Integer、Byte、Character、Short、Long、Boolean&#xff09;的某些值会被缓存。2.以提高性能并减少内存使用。3.这种缓存机制是自…...

6月20日(周四)A股行情总结:A股险守3000点,恒生科技指数跌1.6%

A股三大股指走弱&#xff0c;科创板逆势上扬&#xff0c;半导体板块走强&#xff0c;多股20CM涨停。中芯国际港股涨超1%。恒生科技指数跌超1%。离岸人民币对美元汇率小幅走低&#xff0c;20日盘中最低跌至7.2874&#xff0c;创下2023年11月中旬以来的新低&#xff0c;随后收复部…...

Parallels Desktop 19 for mac破解版安装激活使用指南

Parallels Desktop 19 for Mac 乃是一款适配于 Mac 的虚拟化软件。它能让您在 Mac 计算机上同时运行多个操作系统。您可借此创建虚拟机&#xff0c;并于其中装设不同的操作系统&#xff0c;如 Windows、Linux 或 macOS。使用 Parallels Desktop 19 mac 版时&#xff0c;您可在 …...

JExcel API使用笔记

JExcel API使用笔记 JExcel是一个开源的支持excel的java类库&#xff0c;广泛利用其api来生成excel报表 API基本使用 1.创建excel文件 workbook Workbook.createWorkbook(file);//传入file文件2.创建sheet页 WritableSheet sheet workbook.createSheet("记录表&quo…...

springCloudAlibaba之分布式网关组件---gateway

gateway-网关 网关spring cloud gatewaygateway初体验gateway整合nacos简写方式 内置路由断言工厂内置断言工厂 自定义路由断言工厂自定义路由工厂 内置/自定义过滤器典型内置过滤器自定义过滤器 全局过滤器自定义全局过滤器 请求日志记录&跨域处理Gateway跨域配置&#xf…...

Springboot项目jar加密

部署的程序进行加密&#xff0c;防止第三方非法拷贝走项目进行二次开发或部署。我们知道java代码编译后生成的以.class结尾的字节码文件或者.jar/.war结尾的可执行文件都是可以反编译生成.java文件的&#xff0c;虽然反编译后生成的.java文件和原本的.java文件有些微差别&#…...

【React】高阶组件

概述 高阶组件并非一个组件&#xff0c;而是增强组件功能的一个函数。 高阶组件的作用是对多个组件公共逻辑进行横向抽离。 高阶组件 – React (reactjs.org) 示例 ChildCom1.jsx import React from react;function ChildCom1(props) {return (<div>这是子组件1<d…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...