소프트웨어 개발/Scala - Functional 38

[스칼라 알고리즘] 단순 원소 바꾸기, 배열 회전

단순 원소 바꾸기는 포인터가 불가능하기 때문에, 그저 원소를 바꿔 리턴해주는 함수로 바꾸겠다. //그저 인자를 바꿔서 리턴해주는 함수 def swapArr (arr : Array[Int], i : Int, j : Int) : Array[Int] = { val temp = arr(i) arr(i) = arr(j) arr(j) = temp return arr }//end swapArr 그리고 배열을 회전시키는 간단한 메서드의 경우에는 다음과 같이 거꾸로 돌아갈수도 있다. 즉 for문에 대한 10 to 1 by -1 을 써주면 10에서 1로 거꾸로 세는것이다. 아주 간편하다. //인자를 하나를 끼워넣는 함수 def rightRotate (arr : Array[Int], s : Int, t : Int) : Ar..

spark-scala 를 이용한 wordcount 예제

하둡에서 약 30분에서 50분가량 걸렸었던 부분에 있어 스파크를 이용하면 얼마나 빠라질지 기대를 해보면서스칼라 언어로 빠르게 짰다. 다른 부분과 다르게 이런 콜렉션 다루는게 굉장히 빈번하게 이루어진다면 스칼라가 자바보다 훨씬 코드를 단축시킬수 있는 측면이 클것이다. val textFile = sc.textFile("/home/username/word.txt")val counts = textFile.flatMap(line => line.split(" "))map(word => (word, 1))reduceByKey(_ + _)counts.collect() 신기하게도 하둡으로 구현했던 미치도록 많던 코드가 위의 세줄로 압축시킬수있다. 위의 코드는 wordcount이다. 하지만 SPARK_MEM에 제대로된 메..

Spark 설치, 이용하기

스칼라를 기반으로 하는 Spark는 그야말로 확 끌리는 도구 아닐까 싶다. 일단 무작정 다운로드를 해보자.약 200메가 정도 되니, 자신의 하둡 설치 버젼에 따라 잘 골라서 다운로드하면 된다.https://spark.apache.org/downloads.html이제 압축을 풀어주고 바로 이용해볼수 있다.tar -xvfz spark-1.3.1.tgz 스파크에는 다음 기능이 있다.RDD – Resilient Distributed DatasetsTransformations & Actions - RDD에는 상기의 두가지 연산이 있음 (기존의 Reduce보다 제공하는 연산이 굉장히 많다.) RAM에도 읽기만 가능하게 만들어서, fault-tolerant & efficient한 램 스토리지를 만들었다고 한다. 그렇..

스칼라 OpenCL 라이브러리, 스칼라 C코드 라이브러리

다음을 이용하면 스칼라를 이용한 GPU 병렬처리계산을 자연스럽게 할수 있다고 한다.지금은 아직은 완성과는 거리가 멀지만, 어느정도 완성단계에 이르면 상당히 쉽게GPU병렬처리계산을 통해 성능을 향상시킬수 있을 듯하다.https://code.google.com/p/scalacl/ 또한, bridj라는 프로젝트는 일반적인 c뿐만 아니라 c++ COM객체등을 스칼라등에서 쉽게 쓸수 있게 해주는 라이브러리 인듯하다.자매품은 기본내장으로 달려있는 JNI, 그리고 sun에서 만든 JNA, 업데이트는 잘 안되고 있지만 어쨌든 스칼라에서 함수를 쓸수있게 해주는 SNA, 그리고 JNAeragtor, bridJ가 있는데, 그나마 조금이나마 스칼라에서 쓸수있도록 도큐멘테이션을 지원해주는 데는여러모로 봤을때 bridJ가 나은것..

스칼라에서 DLL 라이브러리 이용하기

DLL라이브러리는 동적 링크 라이브러리로써 자바에 붙여쓰러면 JNI나, JNA를 사용할수 있다. package test import com.sun.jna.{Function => JNAFunction} import scala.language.dynamics import scala.collection.mutable class Library (val libName: String) extends Dynamic { class Invocation (val jnaFunction: JNAFunction, val args: Array[Object]) { def apply[R](implicit m: Manifest[R]): R = { if (m.runtimeClass == classOf[Unit]) { jnaFunctio..

Django Websocket구현하기

퇴근후 저녁 8시부터 시작했다. 사실, 서버에 들어가서 모든 데이터를 하나씩 돌리는것은 정말 효율이 별로다. 40초가 걸리는걸 1초로 튜닝해놨어도 그걸 30분씩 돌리고 앉아있으면 짜증나고, 중간에 한번이라도 잘 못 되면 모든 데이터 작업이 날라간다는 점은, 별로 그다지 효율적이 못하다고 생각한다. 따라서 최신기술은 WebSocket을 이용해서 비동기통신을 구현하는게 시급하다. 왜 WebSocket이냐구? 이미 지나간 비동기 ajax는 재미가 없기 때문이다. 일단 시간이 없으니 구글에 쳐서 아무거나 websocket비슷한걸을 찾아보기로 한다. 일단 후보는 다음과같아 보인다. 여기서 한번 시작을 해보자. 일단 도큐멘테이션이 없으면 안된다. redis를 택해보기로 하자. http://django-websock..