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

被折叠的 条评论
为什么被折叠?



