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

    2017. 9. 20. 15:29

    by. 위지원

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


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

    우선 그전에 스칼라는 왜 공부하느냐 하면 스파크는 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)


    '2017년 > Spark' 카테고리의 다른 글

    spark sql  (0) 2017.10.18
    HDFS와 YARN  (0) 2017.10.11
    spakrR과 R의 메모리  (0) 2017.09.12
    sparkR 이제 좀 써보자..  (0) 2017.08.28
    sparkR을 또 공부해보자  (0) 2017.08.18