A short primer on Scala

Scala is relatively new language based on the JVM. The main difference between other “Object Oriented Languages” and Scala is that everything in Scala is an object. The primitive types that are defined in Java, such as int or boolean, are objects in Scala. Functions are treated as objects, too. As objects, they can be passed as arguments, allowing a functional programming approach to writing applications for Apache Spark.

If you have programmed in Java or C#, you should feel right at home with Scala with very little effort.

You can also run or compile Scala programs from commandline or from IDEs such as Eclipse.

To learn and experiment with data, I prefer the interactivity of the Scala shell. Let’s launch the Spark shell as it is a fully capable Scala shell.

spark-shell --master yarn-client --driver-memory 512m --executor-memory 512m

Values

Values can be either mutable or immutable. Mutable values are expressed by the var keyword.

var a: Int = 5
a = a + 1
println(a)

Immutable values are expressed by the val keyword.

val b: Int = 7
b = b + 1 //Error
println(b)

Type Inference

Scala like Java is a strongly typed language. But, it is very smart in type inference, which alleviates the onus of specifying types from the programmers.

var c = 9
println(c.getClass)

val d = 9.9
println(d.getClass)

val e = "Hello"
println(e.getClass)

Functions

Functions are defined with the def keyword. In Scala, the last expression in the function body is returned without the need of the return keyword.

def cube(x: Int): Int = {
  val x2 = x * x * x
  x2
}

cube(3)

You can write the function more succinctly by leaving out the braces and the return type as return type can be easily inferred.

def cube(x: Int) = x*x*x

Anonymous Functions

Anonymous functions can be assigned as a var or val value. It can also be passed to and returned from other functions.

val sqr: Int => Int = x => x * x
sqr(2)

Or, anonymous functions can be further shortened to

val thrice: Int => Int = _ * 3
thrice(15)

where _ is a the shorthand for whatever the input was.

Collections

Scala has very convenient set of collections including Lists, Sets, Tuples, Iterators and Options. When you combine these data structures with anonymous functions and closures it is very expressive.

val strs = Array("This", "is", "happening")

strs.map(_.reverse)

strs.reduce(_+" "+_)

This is far from comprehensive. To learn more visit http://scala-lang.org