Programming/Scala(26)
-
[13강] scala 계층 구조
스칼라의 계층 구조는 아래의 트리 구조를 따른다. 최상위 슈퍼 클래스는 scala.Any이다. 모든 클래스가 Any를 상속하기 때문에 객체 간의 ==, !=, equals 등의 비교가 가능하다. 또한 Any 클래스에서는 == , !=는 final로 설정이 되어 있기 때문에 override가 불가능 하다. Any는 서브 클래스를 두 개 가지고 있는데 바로 AnyVal과 AnyRef이다. AnyVal의 경우는 Scala에 존재하는 값 클래스의 부모 클래스이며, Byte, Short, Char, Int, Float, Double, Boolean, Unit 이렇게 9 가지 클래스가 값 클래스에 해당한다.값 클래스는 내부적으로 final 클래스로 선언이 되었기 때문에 new 연산자로 인스턴스화가 불가능 하다.즉 ..
2018.04.03 -
[SPARK] RDD error 체크하기
아래 형태의 코드를 스칼라를 이용해서 구현했다. for ( i println("Exception " + e) }} 위의 경우에 해당하는 폴더가 없거나 파일이 없는 경우, textFile.count()를 하게 되면 exception 에러가 발생하고 종료하게 된다.'아,,,, exception이 나더라도 그 다음 번 for문을 돌리고 싶은데 어떻게 해야 하지??' scala에 대해 온갖 욕을 해대며 구글링 시작... Try라는 것을 발견했다. 사용법은 아래와 같다. import scala.util.Try val result = Try(textFile.count()) 이렇게 Try로 감싸주게 되면 exception이 발생하지 않고 해당 성공, 실패 여부를 값으로 받아오게 된다.받아온 값은 아래 함수를 통해 성..
2018.03.29 -
Java.util.map을 scala Map으로 변환하기
Scala를 쓸 때 항상 뻘짓을 하게 되는 부분이 형변환인 것 같다.python을 쓸때는 그냥 다 통용되는 느낌이었는데, scala에서는 데이터 형이 생각보다 엄청 중요하다는 걸 쓰면서 깨닫게 된다.특히나 java에서 통용되는 Object 객체를 scala Map 등으로 바꿔주는게 생각보다 정말 까다롭고 힘들었다. 나 역시 java library를 통해 java.util.Map[String, Object] 이 형태로 값을 리턴 받았는데, value에 해당하는 Object를 처리하기 너무 까다로워서 java 코드 자체를 java.util.Map[String, Map[String, String]]으로 다시 변경해서 리턴을 받았다. 지금부터는 자바 Map을 scala Map으로 형변환 하는 방법을 서술할 것이..
2018.03.27 -
[5강] 클래스와 객체
CLASS, FIELD, METHOD scala에서의 class, field, method는 JAVA와 상당히 유사하다. 일단 scala에서는 아래와 같이 class를 정의 할 수가 있다. class Test { var variable = 0 } 해당 클래스를 객체로 만들고 싶다면 아래와 같이 new로 선언해 주면 된다. val test1 = new Test() 또한 Test class 내의 변수 무결성을 보장해 주기 위해 private로 선언해 줄 수도 있다. class Test { private var variable = 0 } scala에서는 기본적으로 변수 선언을 하게 되면 public이며, 따로 public 키워드를 사용하고 있지는 않다. 이제 변수를 파라미터로 받아서 variable에 더해주는..
2018.03.03 -
IntelliJ에서 scala 사용해보기
우선 mac 기준으로 IntelliJ와 JDK는 깔려 있다는 가정하에 IntelliJ에서 IntelliJ IDEA > Plugins에서 scala를 검색해보자. 위의 그림과 같이 SBT와 Scala가 검색이 되는데 이 두 개의 플러그인을 모두 설치하자. 설치한 후에는 IntelliJ 리스타트~ 하기 전에 scala sdk부터 설치를 하자. 아래의 링크로 들어가서 scala sdk를 설치하자. https://www.scala-lang.org/download/ 나 같은 경우에는 Mac OS 버전인 scala-2.12.4tgz을 다운 받았다. 적절한 폴더에 압축을 풀어주자. (나 같은 경우에는 JAVA JDK와 비슷한 위치에 압축을 풀음.) 기왕이면 SCALA_HOME과 PATH도 ~./bash_profile..
2018.02.23 -
Tail Recursion - Coursera 강의 ppt 번역
Review: Evaluating a Function Application f(e1, ..., en) 이라는 함수가 있다고 가정할 때, expression e1,...,en 의 결과 값은 v1,...,vn이 되며, 함수 f 안에 있는 e1,...,en을 v1,...,vn으로 교체해도 함수 f의 동작이 무방할 때 이를 substitution model이라고 한다.아래 코드는 위의 글을 프로그램적으로 다시 쓴 것이다. def f(x1,...,xn) = B; ...f(v1,...,vn)def f(x1,...,xn) = B; ... [v1/x1,..., vn/xn]B 여기서 [v1/x1,...,vn/xn]B이 의미하는 것은 expression B에 있는 모든 vi는 xi에 의해 교체될 수 있음을 의미하고, [v..
2016.01.07