Scala基础1

这篇博客介绍了Scala的基础知识,包括元数据和源数据的概念,重点讲解了Scala语法中的变量声明(val和var)、类型推导、asInstanceof和isInstanceof的使用。此外,还讨论了函数调用的规则,循环表达式的应用,以及面向对象编程的特点,如占位符和数据类型的指定。文章最后通过SparkConf的例子展示了Scala构造方法的使用。
  • 元数据:描述数据的数据
  • 源数据:源头数据,raw,etl的源头,input的数据

Scala语法

1. 修饰变量

val name:String = "17"  //值不可以更改
name = “asd” //报错  error: illegal character '\u201c'
var money:Int=10000  // 只可以更改
money =10 

val修饰的变量不可变,var修饰的变量可变

只要后面赋值了,类型就可以不写;scala可以自动推导数据类型

val a=1f   // a: Float = 1.0

asInstanceof 和 isInstanceof

val a1 = 10.asInstanceOf[Double]  // a1: Double = 10.0 ,把int转为了Double
val b = 10.0.isInstanceOf[Double] //  b: Boolean = true 判断10.0是不是double类型

2.函数、方法

def max(x:Int, y:Int): Int={
	if(x>y){
    	x
    }else{
		y
	}
}
def sum(x:Int,y:Int):Int={
	x+y
}
def main(args:Array[String]): Unit={
	println(sum(2,4))
}

函数没有入参,调用时()可以省略

3.循环表达式

val a=1
1 to 10  //  Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)   [ ]
Range(1,10) // Range(1, 2, 3, 4, 5, 6, 7, 8, 9)  [ )
Range(1,10,1) // Range(1, 2, 3, 4, 5, 6, 7, 8, 9)  [ )
Range(10,1,-1) // Range(10, 9, 8, 7, 6, 5, 4, 3, 2) 
1 until 10 // Range(1, 2, 3, 4, 5, 6, 7, 8, 9)  [ )
1.until(10)  //  Range(1, 2, 3, 4, 5, 6, 7, 8, 9)

打印1-10中所有的偶数

for(i  <- 1 to 10 if i%2==0){
	println(i)
}

面向对象

package com.ruozedata.bigdata.scala01

/**
  * Author:Yangxin Yuan
  * Date:2019-04-22 10:22
  * Description:<描述>
  */
object ClassDemo {
  def main(args: Array[String]): Unit = {
    val people = new People //new一个人出来
    people.name = "耶耶耶"
    println(people.sleep)
  }
}

class People{
  var name = ""  // 可以用占位符替换 
  var city =""
  def sleep()={
    name+" sleeping now"
  }
  def eat(fellowname: String):Unit={
    println(name+" is eatin with" +fellowname)
  }
}

使用占位符的时候,必须要指定数据类型

SparkConf初级版的例子

package com.ruozedata.bigdata.scala01

object SparkConfApp {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf
    sparkConf.setAppName("SparkConfApp")
    sparkConf.setMaster("yarn")
    println(sparkConf.printInfo)

  }
}

class SparkConf{
  var master:String=_
  var appName:String=_

  def setMaster(master:String):Unit={
    this.master = master
  }

  def setAppName(name:String)={
    this.appName = name
  }

  def printInfo:String={
   this.master+" "+this.appName
  }
}

改进版,返回自己

package com.ruozedata.bigdata.scala01


object SparkConfApp {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf
    sparkConf.setAppName("SparkConfApp").setMaster("yarn")
    println(sparkConf.printInfo)

  }
}

class SparkConf{
  var master:String=_
  var appName:String=_

  def setMaster(master:String)={
    this.master = master
    this
  }

  def setAppName(name:String)={
    this.appName = name
    this
  }

  def printInfo:String={
   this.master+" "+this.appName
  }
}

改进版2

package com.ruozedata.bigdata.scala01

import java.util.concurrent.ConcurrentHashMap


object SparkConfApp {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf
    sparkConf.setAppName("SparkConfApp").setMaster("yarn")
    println(sparkConf.printInfo)

  }
}

class SparkConf{
  var setting = new ConcurrentHashMap[String,String]()
  def setMaster(master:String)={
    set("spark.master",master)
  }

  def setAppName(name:String)={
    set("spark.app.name",name)
  }

  def set(key:String,value:String):SparkConf={
    setting.put(key,value)
    this
  }

  def printInfo:String={
   setting.get("spark.master")+" "+setting.get("spark.app.name")
  }
}

Scala的构造方法

package com.ruozedata.bigdata.scala01


object SparkConstructor {
  def main(args: Array[String]): Unit = {
    var person = new Person("a","nj")
    println(person.name+" "+person.age)

    val person2 = new Person("b","sh",30)
    println(person2.name+" "+person2.age)

  }


}

//主构造器
class Person(val name:String,val city:String){
  println("Person enter ....")

  var age:Int=_

  //附属构造器,第一行必须调用主构造器或其他附属构造器
  def this(name:String,city:String,age:Int){
    this(name,city)
    this.age = age
  }
  println("Person leave ....")
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值