Friday, 24 April 2020

Revisiting Scala - Part I

scala> var num = List(1,2,3,4)
num: List[Int] = List(1, 2, 3, 4)

scala> num.head
res38: Int = 1

scala> num.tail
res39: List[Int] = List(2, 3, 4)

scala> num.sum
res40: Int = 10

scala> val myList = List(1,2,3,3,2,1,1,1,3,3,2,2)
myList: List[Int] = List(1, 2, 3, 3, 2, 1, 1, 1, 3, 3, 2, 2)

scala> val distinctt = myList.distinct
distinctt: List[Int] = List(1, 2, 3)

scala> val distt = myList.toSet
distt: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> val d = distt.toList
d: List[Int] = List(1, 2, 3)

scala> myList.size
res52: Int = 12

scala> myList.length
res53: Int = 12


scala> val num = List(1,2,3,4)
num: List[Int] = List(1, 2, 3, 4)

scala> num(0)
res54: Int = 1

scala> num(2)
res55: Int = 3

scala> num(3)
res56: Int = 4

scala> num.size
res57: Int = 4

scala> num.length
res58: Int = 4

scala> num.reverse
res59: List[Int] = List(4, 3, 2, 1)

scala> num.min
res60: Int = 1

scala> num.sum
res61: Int = 10

scala> num.max
res62: Int = 4

scala> num.isEmpty
res63: Boolean = false


scala> val myL = List()
myL: List[Nothing] = List()

scala> myL.isEmpty
res64: Boolean = true

scala> val myL = List(1,2,3,4)
myL: List[Int] = List(1, 2, 3, 4)

scala> myL.isEmpty
res65: Boolean = false


//Array of integer
scala> var num  = Array(1,2,3,4,5)
num: Array[Int] = Array(1, 2, 3, 4, 5)

scala> num(0)=10

scala> num(2)=20

scala> num
res68: Array[Int] = Array(10, 2, 20, 4, 5)


scala> var languages = Array("Scala","Java","Python","JavaScript")
languages: Array[String] = Array(Scala, Java, Python, JavaScript)


scala> languages.head
res70: String = Scala

scala> languages.tail
res71: Array[String] = Array(Java, Python, JavaScript)


scala> languages(0)
res72: String = Scala

scala> languages(1)
res73: String = Java

scala> languages(2)
res74: String = Python

scala> languages(3)
res75: String = JavaScript

// change the Array element values
scala> num
res77: Array[Int] = Array(10, 2, 20, 4, 5)

scala> num(0)=1

scala> num(2)=3

scala> num
res80: Array[Int] = Array(1, 2, 3, 4, 5)


scala> languages
res81: Array[String] = Array(Scala, Java, Python, JavaScript)

scala> languages(0)="C#"

scala> languages(1)="COBOL"

scala> languages(2)="Lisp"

scala> languages
res85: Array[String] = Array(C#, COBOL, Lisp, JavaScript)


Array size is fixed


mutable Array is dynamically grow

ArrayBuffer size can dynamically grow

scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer

scala> var cars = new ArrayBuffer[String]()
cars: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer()

scala> cars += "BMW"
res86: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(BMW)

scala> cars += "Jaguar"
res87: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(BMW, Jaguar)

scala> cars += "Ford"
res88: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(BMW, Jaguar, Ford)

scala> cars.foreach(println)
BMW
Jaguar
Ford

scala> cars-="Ford"
res90: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(BMW, Jaguar)

scala> cars-="BMW"
res91: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(Jaguar)

scala> cars
res92: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(Jaguar)

scala> cars+="Hundai"
res93: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(Jaguar, Hundai)

scala> cars
res94: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(Jaguar, Hundai)



scala> var numbers = new ArrayBuffer[Int]()
numbers: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()

scala> numbers += 100
res95: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(100)

scala> numbers += 101
res96: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(100, 101)

scala> numbers += 102
res97: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(100, 101, 102)

scala> numbers.length
res98: Int = 3

scala> numbers += 103
res99: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(100, 101, 102, 103)

scala> numbers.length
res100: Int = 4




scala> cars.foreach(println)
Jaguar
Hundai

scala> cars.trimEnd(1) -- remove last element

scala> cars.foreach(print)
Jaguar
scala> cars.trimEnd(1)

scala> cars.foreach(print)



scala> cars.insert(0,"Bentley")

scala> cars.insert(1,"BMW")

scala> cars.insert(2,"Maruthi")

scala> cars.foreach(println)
Bentley
BMW
Maruthi


scala> val num = List(1,2,3,4)
num: List[Int] = List(1, 2, 3, 4)

scala> num.map(x => x+x)
res113: List[Int] = List(2, 4, 6, 8)

scala> num.map(x => x*x)
res114: List[Int] = List(1, 4, 9, 16)

scala> num.map(x => x*x*x)
res115: List[Int] = List(1, 8, 27, 64)


scala> val n = num.map(x => (x,x+1,x+2,x+3))
n: List[(Int, Int, Int, Int)] = List((1,2,3,4), (2,3,4,5), (3,4,5,6), (4,5,6,7))

scala> val n = num.map(x => (x,x*1,x*2,x*3))
n: List[(Int, Int, Int, Int)] = List((1,1,2,3), (2,2,4,6), (3,3,6,9), (4,4,8,12))



scala> val n = num.map(x => x+1)
n: List[Int] = List(2, 3, 4, 5)


scala> val num = List(1,2,3,4)
num: List[Int] = List(1, 2, 3, 4)

scala> num.map(x => x*x).map(x => -x).map(x => x+1)
res117: List[Int] = List(0, -3, -8, -15)


scala> val fruitList = List("Apple","Orange","Mango","Grapes","Sapotta")
fruitList: List[String] = List(Apple, Orange, Mango, Grapes, Sapotta)

// length of each element
scala> fruitList.map( x=> (x,x.length))
res121: List[(String, Int)] = List((Apple,5), (Orange,6), (Mango,5), (Grapes,6), (Sapotta,7))


scala> fruitList.filter(x => x.length > 5)
res118: List[String] = List(Orange, Grapes, Sapotta)

scala> fruitList.filter(x => x.length <= 5)
res120: List[String] = List(Apple, Mango)


scala> fruitList.map( x=> (x,x.size))
res122: List[(String, Int)] = List((Apple,5), (Orange,6), (Mango,5), (Grapes,6), (Sapotta,7))



Rating

scala> val rating = List(2.4, 5.6,7.4, 8.9)
rating: List[Double] = List(2.4, 5.6, 7.4, 8.9)

scala> val marks = rating.map (x => x * 10)
marks: List[Double] = List(24.0, 56.0, 74.0, 89.0)

scala> val gradeB = marks.filter (x => x >=60 && x <= 74)
gradeB: List[Double] = List(74.0)

scala> val gradeBRating = gradeB.map (x => x / 10)
gradeBRating: List[Double] = List(7.4)


nested functions:

scala> object nestedFuncEg{
        def main(arg: Array[String]) {
               
                def square(x: Double): Double ={
                        return x * x
                }
               
                def sumsquares(x: Double, y:Double): Double ={
                        return square(x) + square(y)
                }
               
                println("Sum of Squares :" + sumsquares(2,3))
        }
      }
defined object nestedFuncEg

// run it
scala> nestedFuncEg.main(null)
Sum of Squares :13.0



scala> class MyClass(msg:String) {
        def sayHi = { println (msg) }
      }
defined class MyClass


scala> val ob = new MyClass("Mumbai")
ob: MyClass = MyClass@190cc39e

scala> ob.sayHi
Mumbai


scala> class MyClass(msg:String) {
         def sayHi = { println (msg) }
       }
defined class MyClass


scala> object classEg {
                    def main(arg:Array[String]){
                     var ob1 = new MyClass("Hello Singapore")
                     ob1.sayHi
         
                    var ob2 = new MyClass("Hello London")
                     ob2.sayHi
         
                    var ob3 = new MyClass("Hello Srilanka")
                     ob3.sayHi
                    }
                    }
defined object classEg

scala> classEg.main(null)
Hello Singapore
Hello London
Hello Srilanka

object funcByValEx{
def main(args:Array[String]){

def time(): Long ={
println("Inside Time Function")
return System.nanoTime()
}

def exec(t:Long) : Long = {
println("Inside Exec Function")
println("Time : " + t)
println("Exiting from Exec function")
return t
}

println("Main Function : " + exec(time()))
}
}


scala> funcByValEx.main(null)
Inside Time Function
Inside Exec Function
Time : 34709256789660
Exiting from Exec function
Main Function : 34709256789660



// Return statement specified
object funcByValEx{
def main(args:Array[String]){

def time() ={
println("Inside Time Function")
System.nanoTime()
}

def exec(t:Long)  = {
println("Inside Exec Function")
println("Time : " + t)
println("Exiting from Exec function")
t
}

println("Main Function : " + exec(time()))
}
}





//Return statement is optional
scala> object funcByValEx{
        def main(args:Array[String]){
               
                def time() ={
                        println("Inside Time Function")
                        System.nanoTime()
                }
               
                def exec(t:Long)  = {
                        println("Inside Exec Function")
                        println("Time : " + t)
                        println("Exiting from Exec function")
                        t
                }
               
                println("Main Function : " + exec(time))
        }
      }
defined object funcByValEx

scala> funcByValEx.main(null)
Inside Time Function
Inside Exec Function
Time : 34769862864743
Exiting from Exec function
Main Function : 34769862864743


  object funcByValEx{
         def main(args:Array[String]){
               
                 def time  ={
                         println("Inside Time Function")
                         System.nanoTime()
                 }
               
                 def exec(t:Long)  = {
                         println("Inside Exec Function")
                         println("Time : " + t)
                         println("Exiting from Exec function")
                         t
                 }
               
                 println("Main Function : " + exec(time))
         }
       }



















No comments:

Post a Comment

Flume - Simple Demo

// create a folder in hdfs : $ hdfs dfs -mkdir /user/flumeExa // Create a shell script which generates : Hadoop in real world <n>...