2017년/Spark

스칼라를 빠르게 공부해보자

위지원 2017. 9. 20. 15:29

머신런닝 워크북을 보고 공부한 내용


책에 친절하게 스칼라 단기 속성 코스가 있다. 빠르게 읽어보자

우선 그전에 스칼라는 왜 공부하느냐 하면 스파크는 jvm 언어인 스칼라로 작성되기때문이다.


스칼라는 예전에 설치했다. 


$ cd /usr/local/src

$ wget http://www.scala-lang.org/files/archive/scala-2.11.8.tgz

$ mkdir /usr/local/src/scala

$ tar xvf scala-2.11.8.tgz -C /usr/local/src/scala/


$ nano ~/.bashrc


bashrc 파일에 아래와 같이 경로 추가

export SCALA_HOME=/usr/local/src/scala/scala-2.11.8

export PATH=$SCALA_HOME/bin:$PATH

 

$ source ~/.bashrc


책의 실습 내용을 따라해보자.



1.패키지를 가져오는 방식에는 자바와의 차이점은 *대신 _를 쓴다는 것이다.


scala> import java.util._

import java.util._


2.데이터 타입에는  자바와의 차이점은 기본 데이터 타입을 지원하지 않고 모든 타입들이 클래스라는 것이다.


scala> 1000.toString

res6: String = 1000


scala> res6

res7: String = 1000


scala> 1000.toInt

res8: Int = 1000


3.클래스는 자바와 별차이 없다 여기서 var는 val,var둘중에 아무거나 써도 되는데 상수와 변수를 선언할 때 사용한다.
클래스 기본생성자는 public이다 반드시 모든 변수는 스칼라 코드에서 초기화되어야한다.

scala> class myClass{

     | var myval = 0

     | }

defined class myClass


scala> val newC=new myClass

newC: myClass = myClass@36cda2c2


scala> newC.myval=32

newC.myval: Int = 32


scala> println(newC.myval)

32


메서드도 선언해줄수 있고 :Int 이런식으로 반환값을 지정해줄 수 있다. 자바와의 차이점은 정적메서드가 없다는 것이다.


scala> def myMethod():Int={

     | return 3

     | }


scala> myMethod() #전달할 인자가 없다면 ()는 생략해도 좋다. 

res13: Int = 3


당연히 클래스 내부에도 선언해줄 수 있으며 호출할때는 .을 이용하여 호출할 수 있다.

scala> class myC{

     | def myM():Int={

     | return 3

     | }

     | }

defined class myC


scala> myC.myM
res4: Int = 3


4.흐름제어는 더 쉽게 할 수잇다. (while,if문은 자바와 동일)


scala> for(i <- 1 until 10)

     | println(i)

1

2

3

4

5

6

7

8

9


scala> for(i <- 1 to 10)

     | println(i)

1

2

3

4

5

6

7

8

9

10


파일에 대해서 포문을 적용할 수도 있으며, 이때 필터를 적용하여 출력할 수도 있다.


val filesInDir = (new java.io.File("/home/user/").listFiles

for(thisFile<-filesInDir)

println(thisFile)


val fileshere = (new java.io.File("/home/jason/").listFiles)

for(file<-fileshere if file.getName.endWith(".xml")) print(file)