Scala-初学

前提,已经安装好Scala
在Linux终端
准备资料:
a.txt 内容

HIVE 底层 是 hdfs 和 mapreduce 实现存储 和 计算的 。
HIVE 也 可以 使用 hadoop 配置 的 压缩 方法 对 中间 结果 或 最终 数据 进行 压缩

1
import scala.io.Source
scala> val lines = Source.fromFile(“/usr/local/src/test_data/a.txt”).getLines()
lines: Iterator[String] = non-empty iterator
Iterator : 迭代器,不是一个集合
it…next() : 返回迭代器中的下一个元素,同时更新迭代器的状态
it.hasNext(): 用于检查迭代器中是否还有元素
scala> val lines = Source.fromFile(“/usr/local/src/test/a.txt”).getLines().toList
toList:将迭代器中的元素归入到列表中进行返回

Range

定义: 序列, 包括起点和终点,按照给定步长的所有值,是一个特殊的Array

  1. [0,5)
scala> val a= Range(0,5)
a: scala.collection.immutable.Range = Range(0, 1, 2, 3, 4)

等价于

scala> val a = 0 until 5
a: scala.collection.immutable.Range = Range(0, 1, 2, 3, 4)

2.[0,5]

scala> val a = 0 until 5
a: scala.collection.immutable.Range = Range(0, 1, 2, 3, 4)

等价于

scala> val a = 0.to(5)
a: scala.collection.immutable.Range.Inclusive = Range(0, 1, 2, 3, 4, 5)

3.Range 和 list 转换

scala> val list1 = (1 to 20).toList
list1: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)

map

对 a 的每个元素进行遍历然后 * 2

scala> val a = 1 to 5
a: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5)
scala> a.map(x=>x*2)
res0: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10)

Vector 是一个容器,保存其他的数据对象,也可以称为集合,是Scala标准包的,不用导包
1.创建Vector 对象

scala> var v1 = Vector(1,2,3)
v1: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3)

2.索引Vector中的元素,索引是从0开始的

scala> print(v1(0))
1

3 遍历Vector

scala> for(i<-v1) print(i+"/")
1/2/3/

Scala中(下划线) _ 的用法

1,获取集合中的每一个元素

scala> a.map(_*2)
res3: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10)

2 获取元组(Tuple)中的元素

scala> val s = ("hello","scala")
s: (String, String) = (hello,scala)scala> s._1
res4: String = helloscala> s._2
res5: String = scala

3 导入所有包

import scala.io._

4 初始化变量 val 声明的变量不能被修改

scala> var name:String=_
name: String = nullscala> var age:Int=_
age: Int = 0

函数 split

scala> var s = "all back money"
s: String = all back moneyscala> s.split(" ")
res6: Array[String] = Array(all, back, money)

打平函数:
flatten

scala> val s1 = List(Range(1,5),Range(0,5),Range(0,5))
s1: List[scala.collection.immutable.Range] = List(Range(1, 2, 3, 4), Range(0, 1, 2, 3, 4), Range(0, 1, 2, 3, 4))scala> val s2 = s1.flatten
s2: List[Int] = List(1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4)

1.针对每一个元素 * 2

方式一:
scala> s2.map(x=>x*2)
res9: List[Int] = List(2, 4, 6, 8, 0, 2, 4, 6, 8, 0, 2, 4, 6, 8)
方式二:
scala> s2.map(_*2)
res9: List[Int] = List(2, 4, 6, 8, 0, 2, 4, 6, 8, 0, 2, 4, 6, 8)

2 针对s1每个元素直接*2

方式一:
scala> s1.map(x=>x.map(x=>x*2))
res10: List[scala.collection.immutable.IndexedSeq[Int]] = List(Vector(2, 4, 6, 8), Vector(0, 2, 4, 6, 8), Vector(0, 2, 4, 6, 8))
方式二:
scala> s1.map(_.map(_*2))
res11: List[scala.collection.immutable.IndexedSeq[Int]] = List(Vector(2, 4, 6, 8), Vector(0, 2, 4, 6, 8), Vector(0, 2, 4, 6, 8))

flatMap

scala> s1.flatMap(_.map(_*2))
res12: List[Int] = List(2, 4, 6, 8, 0, 2, 4, 6, 8, 0, 2, 4, 6, 8)等价于scala> s1.map(_.map(_*2)).flatten
res13: List[Int] = List(2, 4, 6, 8, 0, 2, 4, 6, 8, 0, 2, 4, 6, 8)

练习:对lines进行 wordCount

scala> val lines = Source.fromFile("/usr/local/src/test_data/a.txt").getLines().toList
lines: List[String] = List("HIVE 底层 是 hdfs 和 mapreduce 实现存储 和 计算的 。 ", HIVE 也 可以 使用 hadoop 配置 的 压缩 方法 对 中间 结果 或 最终 数据 进行 压缩)scala> lines.map(_.split(" "))
res7: List[Array[String]] = List(Array(HIVE, 底层, 是, hdfs, 和, mapreduce, 实现存储, 和, 计算的, 。), Array(HIVE, 也, 可以, 使用, hadoop, 配置, 的, 压缩, 方法, 对, 中间, 结果, 或, 最终, 数据, 进行, 压缩))scala> lines.map(_.split(" ")).flatten
res14: List[String] = List(HIVE, 底层, 是, hdfs, 和, mapreduce, 实现存储, 和, 计算的, 。, HIVE, 也, 可以, 使用, hadoop, 配置, 的, 压缩, 方法, 对, 中间, 结果, 或, 最终, 数据, 进行, 压缩)scala> lines.flatMap(_.split(" "))
res15: List[String] = List(HIVE, 底层, 是, hdfs, 和, mapreduce, 实现存储, 和, 计算的, 。, HIVE, 也, 可以, 使用, hadoop, 配置, 的, 压缩, 方法, 对, 中间, 结果, 或, 最终, 数据, 进行, 压缩)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/215836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 指针常量和常量指针的区别

指针常量 指针常量&#xff1a;顾名思义它就是一个常量&#xff0c;但是是指针修饰的。 格式为&#xff1a; int * const p //指针常量在这个例子下定义以下代码&#xff1a; int a&#xff0c;b&#xff1b; int * const p&a //指针常量 //那么分为一下两种操作 *p9;//操…

普通SSL证书和EV SSL证书有什么区别?

SSL证书是一种用于加密网站和保护用户数据传输的安全协议。在SSL证书的类型中&#xff0c;普通SSL证书和EV SSL证书是两种常见的选择。本文将介绍普通SSL证书和EV SSL证书的区别&#xff0c;以及它们在网站安全性和可信度方面的差异。 1、安全性验证程度 普通SSL证书和EV SSL证…

linux(5):linux基础命令第五弹

在linux基础命令第四弹中http://t.csdnimg.cn/tvuNl我们了解了echo、tail命令、管道符和vim文本编辑器的相关内容。这一篇我们会了解关于命令选项的说明 我们在之前的学习中&#xff0c;发现命令中的选项是非常多的&#xff0c;比如-l -c -m -r -w 等等&#xff0c;命令有很多&…

C++学习笔记之五(String类)

C 前言getlinelength, sizec_strappend, inserterasefindsubstrisspace, isdigit 前言 C是兼容C语言的&#xff0c;所以C的字符串自然继承C语言的一切字符串&#xff0c;但它也衍生出属于自己的字符串类&#xff0c;即String类。String更像是一个容器&#xff0c;但它与容器还…

C++入门【6-C++ 修饰符类型】

C 修饰符类型 C 允许在 char、int 和 double 数据类型前放置修饰符。 修饰符是用于改变变量类型的行为的关键字&#xff0c;它更能满足各种情境的需求。 下面列出了数据类型修饰符&#xff1a; signed&#xff1a;表示变量可以存储负数。对于整型变量来说&#xff0c;signe…

12月11日作业

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示登录成功&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xff0c;弹…

被迫搬家,宽带迁移怎么办?

广州一栋违建烂尾楼&#xff0c;13年里从未停止出租&#xff0c;年年住满人。这栋楼没有贴外墙&#xff0c;裸露的水泥表面都被雨水腐蚀&#xff0c;很多阳台没有建好&#xff0c;只是简单加装了护栏&#xff0c;存在巨大安全隐患。 为什么烂尾楼年年满人呢&#xff1f; 因为它…

算法:快速幂ksm

为什么使用快速幂&#xff1a; 假设题目要求求a的b次方。 c/c里并没有^运算符&#xff0c;所以我们第一时间可能想到使用for循环&#xff0c;将“a * a”语句循环b次。但是这样时间复杂度为O(n),所以当b过大的时候&#xff0c;我们的程序将会非常慢&#xff0c;所以我们需要使用…

基于ssm乐购游戏商城系统论文

摘 要 随着社会的发展&#xff0c;游戏品种越来越多&#xff0c;计算机的优势和普及使得乐购游戏商城系统的开发成为必需。乐购游戏商城系统主要是借助计算机&#xff0c;通过对信息进行管理。减少管理员的工作&#xff0c;同时也方便广大用户对个人所需信息的及时查询以及管理…

基于深度学习的yolov5入侵检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介IntroductionYOLOv5 Overview入侵检测系统架构1. 数据采集2. YOLOv5模型训练3. 实时监测4. 告警与反馈 性能评估与优化 二、功能三、系统四. 总结 一项目简…

Huawei Auth-HTTP Server 1.0 存在任意文件读取漏洞 附POC软件

@[toc] Huawei Auth-HTTP Server 1.0 存在任意文件读取漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学…

【精华帖】发布你造的轮子 -- 创建Nuget包(分布操作)

目录 1、您的项目 2、创建 .nuspec 文件 3、一张图片胜过一千个拉取请求 4、包括自述文件 MD 文件 5、构建软件包 6、将包部署到 Nuget.Org

视频中自监督学习:「我的世界」下指令理解与跟随

本文介绍了北京大学人工智能研究院梁一韬助理教授所带领的 CraftJarvis 团队在「我的世界」环境下探索通用智能体设计的新进展&#xff0c;题为“GROOT: Learning to Follow Instructions by Watching Gameplay Videos”。 ​ GROOT 该研究的核心目标是探索能否摆脱文本数据的标…

【NR技术】NR NG-RAN整体架构 -网络接口以及无线协议框架(四)

1 引言 本博文介绍NR NG-RAN的网络节点间的接口以及无线协议框架。网络接口介绍包括RAN和NGC之间的NG接口&#xff1b;无线协议框架包括用户面和控制面协议。 2 NG接口 2.1 NG用户面接口 NG-U (user plane interface)是NG-RAN节点与UPF之间的接口。NG接口的用户平面协议栈如图…

AutoGen实战应用(一):代码生成、执行和调试

AutoGen 是一个支持使用多个代理来开发大型语言模型(LLM) 应用程序的框架&#xff0c;这些代理采样相互对话的方式来解决人类交给的任务。AutoGen 代理是可定制的、可对话的&#xff0c;并且无缝地允许人类参与。他们采用LLM、人类输入和各种工具组合的各种运作模式。 AutoGen …

二分查找25(Leetcode1498满足条件的子序列数目)

代码&#xff1a; 这道题不能用Math.pow 精度不够 得自己写个数组存2的n次方 class Solution {public int numSubseq(int[] nums, int target) {int mod 1000000007;int n nums.length;System.out.println(n);int[] f new int[100005];f[0]1;for(int i1;i<f.length;i){…

docker 安装mysql 主从复制

一、搭建主服务器的mysql 1.1 先新建文件夹 mkdir -p /data/dockerData/mysql-master/conf 1.2 进入/data/dockerData/mysql-master/conf目录下新建my.config, [mysqld] ## 设置server_id&#xff0c;同一局域网中需要唯一 server_id101 ## 指定不需要同步的数据库名称 bin…

论文阅读《High-frequency Stereo Matching Network》

论文地址&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/papers/Zhao_High-Frequency_Stereo_Matching_Network_CVPR_2023_paper.pdf 源码地址&#xff1a; https://github.com/David-Zhao-1997/High-frequency-Stereo-Matching-Network 概述 在立体匹配研究领域…

web漏洞原理与防御策略,web漏洞怎么挖掘

目录 Web安全的重要性 ​编辑常见的Web漏洞类型及其原理&#xff1a; 1、跨站脚本攻击&#xff08;XSS&#xff09;: 2、SQL注入: 3、跨站请求伪造&#xff08;CSRF&#xff09;: 4、远程文件包含&#xff08;RFI&#xff09;和本地文件包含&#xff08;LFI&#xff09;:…

Spring Boot实现接口幂等

Spring Boot实现接口幂等 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:…