Scala入门到放弃—01—概述

news2024/11/26 14:35:13

文章目录

    • 概述
      • 什么是是Scala?
      • 为什么要使用Scala?
    • 配置环境
      • 安装
      • 测试
    • 基本语法
      • 定义变量
      • 基本数据类型
      • lazy在Scala中的应用

概述

什么是是Scala?

https://www.scala-lang.org/

Scala combines object-oriented and functional programming in one concise, high-level language. Scala’s static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.

Scala这个名字来源于“scalable language”,即“可伸缩的语言”。
它的设计目标随着用户的需求一起成长。
Scala可被广泛应用于各种编程任务,从编写小型的脚本到构建巨型系统,它都能胜任。

为什么要使用Scala?

大教堂指的是那种近乎完美的建筑,修建需要很长的时间,不过一旦建好,就很长时间不做变更。而市集则不同,每天都会有工作于其中的人们不断地对市集进行调整和扩展。Scala更像是市集而不是大教堂,其主要的设计目标就是让用Scala编程的人们可以对它进行扩展和定制。

  • Scala是兼容的

Scala程序会被编译成JVM字节码,它们的运行期性能通常也跟Java程序相当。同时Scala代码可以调用Java方法、访问Java字段、从Java类继承、实现Java接口。要实现这些并不需要特殊的语法,几乎所有的Scala代码都重度使用Java类库。
例如:ScalaInt是用Java的基本类型int实现的,Float是用Javafloat实现的,Boolean是用Javaboolean实现的,比如Scala的字符串字面量“abc”是一个java.lang.String,而抛出的异常也必须是java.lang.Throwable的子类。

  • Scala是简单的
    Scala编写的程序通常都比较短。对比一些大数据中WordCount 的实现;

  • Java


public static class WordCountMapper extends Mapper<LongWritable, Text,Text, IntWritable>{
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//key表示读取的行偏移量,value表示读取的行内容
            String[] words = value.toString().split(" ");
            for (String word:words) {
                context.write(new Text(word),new IntWritable(1));
            }
        }
    }




public static class WordCountReducer extends Reducer<Text, IntWritable,Text, IntWritable>{
        protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable value:values) {
                sum+=value;
            }
            context.write(key,new IntWritable(sum));
        }
    }

public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
         Configuration conf=new Configuration();
        conf.set("fs.defaultFS", "hdfs://master:9000");
        Job job=Job.getInstance(conf);
 
        job.setJarByClass(WcJob.class);
        job.setMapperClass(WcMapper.class);
        job.setReducerClass(WcReduce.class);
 
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
 
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
 
 
        Path path = new Path("/wordcount/out/demo1");
        FileInputFormat.setInputPaths(job,new Path("/wordcount/in/hello.txt"));
        FileOutputFormat.setOutputPath(job,path);
        boolean isDone = job.waitForCompletion(true);
        System.exit(isDone ? 0 : 1);
    }

  • Scala

 def main(args: Array[String]): Unit = {
    val lines = Array("hello word hello tim","hello java hello java","hello tim jim")
    val conf: SparkConf = new  SparkConf().setMaster("local[2]").setAppName(this.getClass.getSimpleName)
    val sc: SparkContext = new SparkContext(conf)
    val value = sc.textFile("in\\wc.txt")
    //scala实现
    val res1=lines.flatMap(_.split(" "))
      .map((_,1))
      .groupBy(_._1)
      .map(x=>(x._1,x._2.size))
      .toList
      .sortBy(_._2).reverse
    println(res1)
  }

配置环境

安装

  1. 安装 Java 8
  2. 下载 download scala 网址:https://www.scala-lang.org/download/2.11.8.html
  3. 解压 unzip scala
  4. 配置环境变量(可选)
    Windows 需配置两个 Path中: D:\scala\binD:\scala\jre\bin

测试

Linux或Mac中操作步骤:
1.tar -zxvf scala-2.11.8.tgz -C  解压路径
2.到解压目录下 pwd  复制整个路径 
3.将上面的路径 添加到环境变量中
	vi ~/.bash_profile
		export SCALA_HOME=复制的路径
		export PATH=$SCALA_HOME/bin:$Path
	保存
	source ~/.bash_profile
	echo $SCALA_HOME
下载之后的scala目录下的bin目录中 有普通文件 和 .bat文件
.bat文件是在Windows中用的,Linux或Mac中用不到,所以可以删掉 rm *.bat

基本语法

定义变量

Scala的变量分为两种:valvarvalJavafinal变量类似,一旦初始化就不能被重新赋值。而var则不同,类似于Java的非final变量,在整个生命周期内var可以被重新赋值。如下是val的定义:

  • val:值
final
val 值名称:类型=xx
val a = 1  (不可变)
val a : int = 1
  • var:变量
var 值名称:类型=xxx
var b = 1
var b : int = 1

val的定义中,既没有java.lang.String,也没有String。这个示例展示了Scala的类型推断(type inference)能力——能够推断出那些不显式指定的类型。在本例中,由于是用字符串字面量来初始化msgScala推断出msg的类型是String。要在解释器中分多行录入代码,只需要在第一行之后直接按回车继续就好。如果当前键入的内容不完整,解释器会自动在下一行的头部加上竖线(|)。

基本数据类型

  • Byte/Char
  • Short/Int/Long/Float/Double
  • Boolean
  • 只有Float声明时比较特别
    var c : Float = 1.1f
scala> b=20
b: Int = 20

scala> val b:Int =10
b: Int = 10

scala> val c:Boolean=true
c: Boolean = true

scala> val d =1.1
d: Double = 1.1

scala> val e:Float=1.2f
e: Float = 1.2


lazy在Scala中的应用

lazy var d : int = 1;
延迟加载,只有在第一次使用时才加载

读取文件并以字符串形式输出

	import scala.io.Source._
	var info = fromFile("...").mkString

如果用lazy var info = fromFile(“…”).mkString,开始是检测不到错误的,要小心使用

*注意:当一个变量声明为lazy,只有当你第一次操作时才会去真正访问,如果不去访问,即使写错了,也不会发现

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

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

相关文章

ELK实验部署过程

ELK集群部署环境准备 配置ELK日志分析系统 192.168.1.51 elk-node1 es、logstash、kibana 192.168.1.52 elk-node2 es、logstash 192.168.1.53 apache logstash &#xff08;我这里是把虚拟机的配置全部都改为2核3G的&#xff09; 2台linux 第1台&#xff1a;elk-nod…

大数据开发工程师前景如何?

大数据需求越来越多&#xff0c;只有技术在手不愁找不到工作。 大数据工程师的技术要求如下&#xff1a; 1、掌握至少一种数据库开发技术&#xff1a;Oracle、Teradata、DB2、Mysql等&#xff0c;灵活运用SQL实现海量数据ETL加工处理&#xff1b; 2、熟悉Linux系统常规shell…

软件工程——第8章维护知识点整理

本专栏是博主个人笔记&#xff0c;主要目的是利用碎片化的时间来记忆软工知识点&#xff0c;特此声明&#xff01; 文章目录 1.维护阶段的基本任务是&#xff1f; 2.大型软件的维护成本大概是开发成本的几倍&#xff1f; 3.什么是软件维护&#xff1f; 4.软件维护分为哪几类…

python代码练习:猜成语游戏

python代码练习&#xff1a;猜成语游戏 题目结果展示源代码 题目 成语填填乐&#xff0c;随机输出一条包含一个空格的成语&#xff0c;填写答案并判断是否正确&#xff0c;正确加2分&#xff0c;输出“正确&#xff0c;你真棒”&#xff0c;错误减2分&#xff0c;输出“错了”…

git tag详解

文章目录 前言1. Git tag的基本概念和用法1.1. 什么是 Git tag&#xff1f;1.2. Git 标签有什么作用&#xff1f; 2. 创建 Git tag2.1. 创建轻量级tag2.2. 创建带有注释的tag2.3. 编辑已有的tag 3. 列出和检出 Git tag3.1. 列出所有tag3.3. 列出匹配的tag3.4. 检出tag 4. 将 Gi…

可视化 | Flask+Mysql+PyEcharts 电影Top250数据分析系统

文章目录 &#x1f3f3;️‍&#x1f308; 1. 数据库数据表1. 电影信息数据表2. 用户数据表 &#x1f3f3;️‍&#x1f308; 2. 各子界面1. 登陆界面2. 注册界面3. 电影信息概要界面4. 搜索界面5. 各年份上映电影数量6. 电影榜单TOP107. 评价人数TOP208. 地区电影TOP109. 电影…

uniapp 微信小程序导航功能(单个地址)

获取终点的坐标&#xff0c;根据终点的坐标&#xff0c;终点名称&#xff0c;终点详细地址&#xff0c;调起地图导航到第三方APP 1、针对单个地址导航 <template><view click"toGetLocation"></view><view click"toNavigation">&…

利用Docker实现容器互连

实验要求 掌握利用Docker实现跨主机容器互连的方法。 实验准备 要求实验主机能够连接外网&#xff0c;已经正确安装Docker&#xff0c;并关闭防火墙和selinux&#xff0c;各主机配置信息如表所示 表 主机配置信息表 主机名 IP地址/子网掩码 容器名 容器IP地址 node1 你…

选对方法,K8s 多集群管理没那么难

作者&#xff1a;庄宇 Kubernetes 作为一项核心技术已成为现代应用程序架构的基础&#xff0c;将 Kubernetes 作为容器编排系统已发展为越来越多企业的必然选择。 随着对云计算接受程度不断提高&#xff0c;以及企业规模和业务持续发展的共同驱动下&#xff0c;越来越多的企业…

开发模式、API接口

文章目录 一、web开发模式1.1 前后端混合开发1.2 前后端分离开发 二、API接口2.1 简介2.2 RESTful API接口规范 道阻且长&#xff0c;行则将至&#xff0c;行而不辍&#xff0c;未来可期&#x1f31f;。人生是一条且漫长且充满荆棘的道路&#xff0c;一路上充斥着各种欲望与诱惑…

rtdetr:paddledetection与ultralytics对比

转眼间&#xff0c;自DETR被提出已经过去了2年了&#xff0c;如今又迎来了2023年&#xff0c;可以说&#xff0c;这是Transformer框架在CV领域发力的第3个年头了。时至今日&#xff0c;对Transformer的质疑声越来越小了&#xff0c;它的强大得到了越来越多、越来越广泛的认可。…

进程与线程的基本概念和代码实现

1 前言 利用现学知识能够让两个函数或者方法同时执行吗? 不能&#xff0c;因为之前所写的程序都是单任务的&#xff0c;也就是说一个函数或者方法执行完成另外一个函数或者方法才能执行&#xff0c;要想实现这种操作就需要使用多任务。 多任务的最大好处是充分利用CPU资源&a…

超好用的检测模块---SUI-101A交流变送器

前言&#xff1a; SUI-101A交流变送器作为高精度交流变送器&#xff0c;可以高精度获取电压、电流、有功功率、功率因素、频率、电量等电参数&#xff0c;并且低功耗&#xff0c;实时性好、操作方便快捷&#xff0c;同时可以隔离高压&#xff0c;便于进行安全测量。 SUI-101A模…

qt for android 开发之tcp通讯

简介 通过TCP使PC和android手机相互通讯。 准备 使用QT的网络模块 QT core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT widgets.h 定义TCP接口 #include <QTcpSocket>class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(Q…

日本最大港口遭勒索软件攻击,造成巨大经济影响!

日本名古屋港位于伊势湾&#xff0c;是日本最大和最繁忙的贸易港口&#xff0c;占全国总贸易量的10%左右。值得注意的是&#xff0c;这个港口还是日本最大的汽车出口国&#xff0c;丰田汽车公司的大部分汽车都在这里出口。 近日该港口遭遇了一次勒索软件攻击&#xff0c;影响了…

Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行

前言 使用IDEA自带打包工具&#xff0c;可以将自己引入的第三方jar包&#xff08;lib下的jar包&#xff0c;非pom文件中&#xff09;打包到jar中。 Artifacts是maven中的一个概念&#xff0c;表示某个module要如何打包&#xff0c;例如war exploded、war、jar、ear等等这种打…

Python 函数耗时异常自动化监控实战教程

内容 隐藏 一、性能数据函数耗时采集及可视化报表生成 1. 性能数据文件保存&#xff08;cProfile&#xff09; 2. 详细性能数据读取查看 二、生成函数调用栈结构图&#xff08;gprof2dot&#xff09;教程 三、性能分析及优化实战 四、耗时异常自动化监控 1. 正态分布数据方…

mysql 主从复制配置步骤

1、准备两台数据库环境&#xff0c;或者单台多实例环境&#xff0c;能否正常启动和登录。 2、配置my.cnf文件&#xff0c;主库配置log-bin和server-id参数&#xff0c;从库配置server-id&#xff0c;不能和主库及其他从库一样&#xff0c;一般不开启从库log-bin功能。注意&…

基于STM32的土壤湿度传感器使用

基于STM32的土壤湿度传感器使用 最近在学习中用到了ADC数据采集这里使用的硬件模块为土壤湿度传感器&#xff0c;下面为土壤传感器相关的使用方法和代码介绍。 1、土壤湿度传感器实物图 土壤湿度传感器一共有4个引脚分别为&#xff1a; GND VCC DO AO&#xff0c;在本次实验中使…

macbook按u键入笔画

mac自带输入法提供了笔画输入快捷方式&#xff0c;键入u会自动变成笔画输入 当遇到不会念的字的时候还是很有用的 横、竖、撇、捺、折、写 上面的拼音首字母对应了比划&#xff0c;非前五个笔画的时候就用 x&#xff08;写&#xff09;替代 比如&#xff1a;彳亍 第一个字输…