从Java到Scala,Scala快速入门(1)

参考

https://www.runoob.com/scala/scala-tutorial.html

目标:对熟悉java语法的人,快速入门到scala

环境安装

  1. 安装jdk环境
  2. 安装scala : http://www.scala-lang.org/downloads

运行代码

运行方式和java一样,scalac编译,scala运行

object HelloWorld {

   def main(args: Array[String]) = {
      println("Hello, world!") // 输出 Hello World
   }
}

注意

Scala 基本语法需要注意以下几点:

  • 区分大小写 - Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义。

  • 类名 - 对于所有的类名的第一个字母要大写。

  • 驼峰命名规则(类名,变量名等)

  • 保存文件时,应该保存它使用的对象名称(记住Scala是区分大小写),并追加".scala"为文件扩展名。 (如果文件名和对象名称不匹配,程序将无法编译)。
    示例: 假设"HelloWorld"是对象的名称。那么该文件应保存为’HelloWorld.scala"

  • def main(args: Array[String]) - Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。

变量

Scala 与 Java有着相同的数据类型,Scala是纯面向对面的,没有基本数据类型int,只有Int类,其他也一样,Int也是有方法调用的

  • Unit 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
  • Null null 或空引用
  • Nothing Nothing类型在Scala的类层级的最底端;它是任何其他类型的子类型。
  • Any Any是所有其他类的超类(类型Object)
  • AnyRef AnyRef类是Scala里所有引用类(reference class)的基类

String

在 Scala 中,字符串的类型实际上是 Java String,它的类型为 String (java.lang.String),它本身没有 String 类。

数组

定义

var z = Array("Runoob", "Baidu", "Google")
var z:Array[String] = new Array[String](3)

访问

z(0) = "Runoob"; z(1) = "Baidu"; z(4/2) = "Google"

遍历

var myList = Array(1.9, 2.9, 3.4, 3.5)
 // 输出所有数组元素
 for ( x <- myList ) {
    println( x )
 }

多维数组

val myMatrix = Array.ofDim[Int](3, 3)

创建范围数组

import Array._

object Test {
   def main(args: Array[String]) {
      var myList1 = range(10, 20, 2)
      var myList2 = range(10,13)//10,11,12
   }
}

定义变量

val a= 1//常量,不可变
var b = "xx" //变量,自动判断类型
var string : String="123"//指定类型

运算符

和java一样,但是没有a++

if else

和java一样

循环语句

whiledo while 和java一样
for循环比较特殊
以下是几种常见的用法
单循环

object Test {
   def main(args: Array[String]) {
      var a = 0;
      // for 循环
      for( a <- 1 to 10){
         println( "Value of a: " + a );
      }
   }
}

双循环

object Test {
   def main(args: Array[String]) {
      var a = 0;
      var b = 0;
      // for 循环
      for( a <- 1 to 3; b <- 1 to 3){
         println( "Value of a: " + a );
         println( "Value of b: " + b );
      }
   }
}

遍历集合

for( x <- List ){
   statement(s);
}

循环+判断

object Test {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6,7,8,9,10);

      // for 循环
      for( a <- numList
           if a != 3; if a < 8 ){
         println( "Value of a: " + a );
      }
   }
}

for+yeild

object Test {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6,7,8,9,10);

      // for 循环
      var retVal = for{ a <- numList 
                        if a != 3; if a < 8
                      }yield a

      // 输出返回值
      for( a <- retVal){
         println( "Value of a: " + a );
      }
   }
}

函数(Scala 也是一种函数式语言,所以函数是 Scala 语言的核心。)

语法和java有很大不同

def functionName ([参数列表]) : [return type] = {
   function body
   return [expr]
}

例子

object add{
   def addInt( a:Int, b:Int ) : Int = {
      var sum:Int = 0
      sum = a + b
      return sum
   }
}

//可以末尾不加return关键字也可以
object add{
   def addInt( a:Int, b:Int ) : Int = {
      var sum:Int = 0
      sum = a + b
      sum
   }
}

// 返回类型也可以不写,自动推断
object add{
   def addInt( a:Int, b:Int ) = {
      var sum:Int = 0
      sum = a + b
      sum
   }
}

此外,可变参数,函数传名调用,递归调用,默认参数都很简单

高阶函数

不太懂
https://www.runoob.com/scala/higher-order-functions.html

函数嵌套

我们可以在 Scala 函数内定义函数,定义在函数内的函数称之为局部函数。

object Test {
   def main(args: Array[String]) {
      println( factorial(0) )
      println( factorial(1) )
      println( factorial(2) )
      println( factorial(3) )
   }

   def factorial(i: Int): Int = {
      def fact(i: Int, accumulator: Int): Int = {
         if (i <= 1)
            accumulator
         else
            fact(i - 1, i * accumulator)
      }
      fact(i, 1)
   }
}

匿名函数

def add2 = new Function1[Int,Int]{  
    def apply(x:Int):Int = x+1;  
} 
//箭头左边是参数列表,右边是函数体。
var inc = (x:Int) => x+1 // 这是一个函数变量
var x = inc(7)-1 //调用
var mul = (x: Int, y: Int) => x*y
var userDir = () => { System.getProperty("user.dir") }

偏应用函数

我们可以使用偏应用函数优化以上方法,绑定第一个 date 参数,第二个参数使用下划线(_)替换缺失的参数列表,并把这个新的函数值的索引的赋给变量。以上实例修改如下:

import java.util.Date

object Test {
   def main(args: Array[String]) {
      val date = new Date
      val logWithDateBound = log(date, _ : String)

      logWithDateBound("message1" )
      Thread.sleep(1000)
      logWithDateBound("message2" )
      Thread.sleep(1000)
      logWithDateBound("message3" )
   }

   def log(date: Date, message: String)  = {
     println(date + "----" + message)
   }
}

函数柯里化(Currying)

首先我们定义一个函数:
def add(x:Int,y:Int)=x+y
那么我们应用的时候,应该是这样用:add(1,2)
现在我们把这个函数变一下形:
def add(x:Int)(y:Int) = x + y
那么我们应用的时候,应该是这样用:add(1)(2),最后结果都一样是3,这种方式(过程)就叫柯里化。
其本质是普通函数+匿名函数,2次调用
def add(x:Int)=(y:Int)=>x+y
所以可以分开调用2次也可以

val result = add(1) 
val sum = result(2)

闭包

https://www.runoob.com/scala/scala-closures.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark是一种快速而通用的集群计算系统,旨在使数据处理更加容易。 Spark 提供了一个简单易用的编程接口,支持 JavaScala、Python 和 R。在本教程中,我们将介绍Spark的一些基本概念,并使用Java编写一个简单的Spark应用程序。 ## 环境准备 在开始之前,您需要准备以下环境: - JDK 8或更高版本 - Maven 3.0或更高版本 ## Spark快速入门 ### 第一步:创建一个Maven项目 首先,我们需要创建一个Maven项目。在您的命令行终端上执行以下命令: ``` mvn archetype:generate -DgroupId=com.spark.example -DartifactId=SparkExample -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ``` 这将创建一个基本的Maven项目。 ### 第二步:添加Spark依赖 在您的Maven项目中添加以下依赖: ```xml <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.5</version> </dependency> ``` ### 第三步:编写Spark应用程序 在您的Maven项目中,创建一个名为 `SparkExample` 的Java文件,并添加以下代码: ```java import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.SparkConf; public class SparkExample { public static void main(String[] args) { // 创建一个 Spark 配置对象 SparkConf conf = new SparkConf().setAppName("SparkExample").setMaster("local[*]"); // 创建一个 Spark 上下文对象 JavaSparkContext sc = new JavaSparkContext(conf); // 创建一个 RDD JavaRDD<String> lines = sc.textFile("src/main/resources/example.txt"); // 打印 RDD 中的行数 System.out.println("Lines count: " + lines.count()); // 关闭 Spark 上下文对象 sc.close(); } } ``` 这个应用程序将读取一个名为 `example.txt` 的文本文件,并打印出该文件中的行数。 ### 第四步:运行Spark应用程序 在您的命令行终端上执行以下命令来运行Spark应用程序: ``` mvn package ``` 这将编译和打包您的Maven项目,并生成一个名为 `SparkExample-1.0-SNAPSHOT.jar` 的Jar文件。 然后,您可以在命令行终端上运行以下命令来启动Spark应用程序: ``` spark-submit --class com.spark.example.SparkExample target/SparkExample-1.0-SNAPSHOT.jar ``` 这将启动Spark应用程序,并输出包含行数的消息。 ## 总结 在本教程中,我们介绍了Spark的一些基本概念,并使用Java编写了一个简单的Spark应用程序。希望这篇文章能够帮助您快速入门Spark。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值