[머신러닝] 아파치 스파크를 위한 스칼라 프로그래밍 기본 소양 익히기

류명운

·

2016. 9. 24. 17:26

반응형

[머신러닝] 아파치 스파크를 위한 스칼라 프로그래밍 기본 소양 익히기

본인과 같이 자바 프로그래머이지만, 스파크를 이용한 머신러닝을 위해 스칼라 언어의 핵심만 배우는 경우 본 포스팅이 도움이 될 것 같다.

스칼라 언어에 대한 보다 자세한 내용은 다음 사이트에서 볼 수 있다.

스칼라 설치하기

스칼라는 JVM을 사용하여 바이트 코드를 실행하므로 JVM 언어로 분류된다. 스칼라로 프로그램을 작성하여 스파크에서 실행하고 싶다면 스칼라를 다운로드해 설치해야 한다.

기본 사항에 들어가기 앞서 먼저 스칼라를 다운로드하자. 다음 사이트에서 다운로드할 수 있다.

* 스파크만 사용하고 싶다면 배포본에 이미 라이브러리가 있으므로 스칼라를 다운로드할 필요가 없다.

사용하는 운영체제에 맞는 최신 버전을 선택하여 다운로드한 뒤 적당한 위치에 압축을 푼다. (보통 OS X나 리눅스의 경우는 tgz 파일, 윈도우의 경우 zip파일)

우선, 명령줄에서 프로그램을 실행할 수 있도록 경로에 bin 디렉터리가 포함되었는지 정도만 확인하여 준다.

패키지

패키지 가져오기(import)는 자바 가져오기와 같은 방식이지만, 스칼라에서는 * 대신 _를 사용한다.

import java.util._
import org.my.thing_

스칼라는 앞서 말했듯이 JVM에 뿌리를 둔 것이라 자바 라이브러리나 서드파티 라이브러리를 가져와 사용할 수 있다.

데이터 타입

스칼라는 자바와 달리 기본 데이터 타입을 지원하지 않지만, 다음과 같이 일곱가지 수치형 데이터 타입(클래스)을 제공한다.

  • Byte
  • Char
  • Short
  • Int
  • Long
  • Float
  • Double
  • Boolean

* 이 타입들은 모두 클래스이므로 자바에서와 마찬가지로 클래스 메서드를 사용할 수 있다.

scala> 1000.toString
res10: String = 1000
scala> 1000.toDouble
res11: Double = 1000.0
scala> 1000.toInt
res13: Int = 1000

상수와 변수 선언은 val이나 var을 사용한다. 무엇을 사용하든 상관 없다.

클래스

스칼라 소스 파일에는 자바처럼 원하는 클래스를 많이 담을 수 있다.

class MyClass {
  var myval = 0
}

POJO(Plain Old Java Objects)는 공용 변수를 만들고, 두 메서드 getter와 setter를 만든다. 스칼라도 마찬가지다. 변수(myval의 경우)는 다음과 같이 사용된다.

val newclass = new MyClass
newclass.myval = 42
println(newclass.myval)

스칼라 클래스의 기본 생성자는 public이다. 모든 변수는 스칼라 코드에서 초기화되어야 하며, 이는 선택 사항이 아니다.

클래스에서 자바처럼 메서드를 정의할 수 있다. 기본적인 void 메서드는 다음과 같다.

def myMethod() {
}

자바처럼 반환 타입을 추가할 수 있다. 정수 값을 반환하고 싶다면 다음과 같이 입력한다.

def myMethod(): Int = {
  retrun 42
}

상수와 변수 선언은 val이나 var을 사용한다. 무엇을 사용하든 상관 없다.

마지막으로, 함수에 값을 전달하는 방법은 다음과 같이 두 숫자를 더하여 답을 반환하면 된다.

def myMethod(a: Int, b: Int) : Int = {
  retrun a + b
}

함수 호출하기

스칼라에서 함수 호출은 거의 대부분 자바와 같다. '.'을 사용하여 메서드 이름을 호출한다. 전달할 값이 없다면 괄호는 없어도 된다(괄호는 옵션). 자바와 달리 스칼라에서는 정적(static) 메서드가 없다.

연산자

스칼라 연산자는 대부분 자바 연산자와 같은 방식으로 작동한다.

흐름 제어

스칼라는 if, while, for와 같은 흐름 제어 구문을 지원한다.

for 루프 : for 루프는 컬렉션을 다룰 수 있다. 예를 들면 다음과 같다.

val filesInDir = (new java.io.File("/home/user/").listFiles
for (thisFile <- filesInDir)
  println(thisFile)

자바의 for 루프보다 간단하게 반복 구간을 정할 수 있다.

for (i <- 1 until 10)
  println(i)
for (i <- 1 to 10)
  println(i)

while 루프 : while 루프는 자바의 while 루프와 같은 방식으로 작동한다.

while (value != 100) {
  value += 1
}

if 문 : if 문은 자바의 if 문과 같다. 스칼라는 자바처럼 삼항 연산자(ternary operator)를 지원한다.

// Java
boolean debug = server.equals("localhost") ? true : false;
// Scala
var debug = if(server.equals("localhost")) true else false;

여기까지 스파크를 위한 스칼라 프로그래밍의 기본 소양에 대해 알아보았다. 사실 스칼라보다는 간단하지 않지만 자바언어를 통해 스파크 프로그래밍을 할수 있다. 아직 스칼라언어에 대한 익숙치 않은 이해로 더 이상의 포스팅은 다루지 않도록 하겠다. 



반응형