목록Data/Spark (41)
우노
들어가기 앞서, Breeze 가 제공하는 CSCMatrix Multiply 는, 곱셈전에 결과 Matrix 의 NNZ 를 먼저 구합니다. 결과 Matrix 의 NNZ 를 구한 이후에는, NNZ 에 따라 결과 Matrix 를 표현하기 위한 배열 공간을 정적으로 할당합니다. 해당 포스트에서는, 기본적인 Breeze CSCMatrix Multiply 와 달리, 곱셈전에 임의의 배열 공간을 정적으로 할당한 뒤, 곱셈 과정에서 부족한 배열 공간을 동적으로 할당하는 코드를 다뤄보겠습니다. 함수 선언 Multiply 함수 import java.util.Arrays import breeze.linalg.CSCMatrix import java.util.concurrent.TimeUnit.NANOSECONDS def dy..
들어가기 앞서, Breeze 가 제공하는 CSCMatrix Multiply 는, 곱셈전에 결과 Matrix 의 NNZ 를 먼저 구합니다. 결과 Matrix 의 NNZ 를 구한 이후에는, NNZ 에 따라 결과 Matrix 를 표현하기 위한 배열 공간을 정적 할당합니다. 함수 선언 결과 Matrix NNZ 계산 함수 // 결과 Matrix 의 NNZ 를 미리 계산 def computeNnz(a: CSCMatrix[Double], b: CSCMatrix[Double], workIndex: Array[Double]) = { // nnz 를 0 으로 초기화 var nnz = 0 // col = 우측 행렬의 col index 순서대로 진행 for (col
Spark ML 패키지와 MLlib 패키지의 차이 ML 패키지는 DataFrame 기반의 머신러닝 지원 패키지이다. MLlib 패키지는 RDD 기반의 머신러닝 지원 패키지이다. Spark ML 의 정식 명칭은 'MLlib DataFrame-based API' 이며, DataFrame 이 RDD 보다 Spark 에서의 로딩, 실행 계획 최적화, 언어 간의 API 통일성에 있어 장점이 있기 때문에 ML 패키지가 Spark 2 버전 기준, 머신 러닝을 위한 Primary API 이다. Spark ML, MLlib 패키지 제공 기능 ML Algorithms Classification, Regression, Clustering, Collaborative filtering 등의 머신러닝 알고리즘 제공..
Reference https://spark.apache.org/docs/latest/api/java/org/apache/spark/mllib/linalg/distributed/BlockMatrix.html https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/linalg/distributed/BlockMatrix.scala 예제 코드 import org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, MatrixEntry} val lr = 1134890 val lc = 1134890 val rc = 1000 val lr_block = 3000 val..
sc.textFile Spark 환경에서, 외부 텍스트 데이터를 spark context 객체의 textFile 메서드를 이용해 읽어오면, Spark Cluster 내에 RDD 객체가 생성된다. sc.textFile() 함수 사용 코드는 아래와 같다. val temp = sc.textFile("file:///home/test.txt", minPartitions=3) temp.getNumPartitions 또한, RDD 생성시, minPartitions 매개변수를 통해 데이터를 최소 몇 조각으로 나눌지 지정할 수 있으며, RDD 생성 후, getNumPartitions 함수를 통해 데이터가 총 몇 조각의 파티션으로 나뉘었는지도 확인할 수 있다. 데이터를 몇 개의 파티션으로 나누는게 좋을까? 각 Execut..
특정 application 의 전체 로그 확인 yarn logs -applicationId 특정 application 의 에러 로그만 확인 yarn logs -applicationId -log_files stderr참고 https://sthyun.tistory.com/entry/Yarn-log-확인
RDD Operation Spark 의 RDD 는 2가지 Operation(Transformation, Action) 을 사용해 조작할 수 있습니다 Transformation 기존의 RDD 를 변경하여 새로운 RDD 를 생성하는 것입니다. 즉, 리턴값이 RDD 입니다. map, filter 등을 예로 들 수 있습니다. Action RDD 값을 기반으로 무엇인가를 계산해서, 결과를 생성하는 것입니다. 즉, 리턴값이 데이터 또는 실행 결과입니다. collect, count 등을 예로 들 수 있습니다. 이러한, RDD 동작 원리의 핵심은 Lazy Evaluation (느긋한 연산) 입니다. 즉, RDD 는 Action 연산자를 만나기 전까지는, Transformation 연산자가 아무리 쌓여도 처리하지 않습니..
json4s 란? spark-shell 에서 Map 을 json 으로 변환할 수 있는 방법 중 하나는, json4s library를 사용하는 것이다. 예제 코드 import org.json4s.jackson.JsonMethods._ import org.json4s.JsonDSL._ // Map 생성 val map : Map[String,org.json4s.JsonAST.JValue] = Map("a"->1, "b"->"cool") // Map to json val json = pretty(render(map)) //{ // "a" : 1, // "b" : "cool" //}
HttpClient란? 간혹 다른 서버로부터 request를 보내 response 받아 데이터를 처리해야할 때가 있는데, 이 때, Apache HttpClient를 이용하면 간편하게 HTTP request를 보낼 수 있습니다. 예제 코드 import org.apache.http.impl.client.HttpClients import org.apache.http.client.methods.HttpPost import org.apache.http.entity.StringEntity import org.apache.http.client.methods.CloseableHttpResponse import org.apache.http.util.EntityUtils // api url 선언 val apiurl = "..
System.currentTimeMillis() console이 아닌 jar file을 통해 Apache Spark를 작업할 때, Spark 작업의 부분적인 실행 시간을 확인하고 싶다면, 아래와 같이 로그를 찍어가며 확인 할 수 있다. 사용 예제 // Scala에서 사용할 수 있는 Java 기반 로깅 유틸리티 import org.apache.log4j.LogManager val log = LogManager.getRootLogger // Time 측정 (ms단위) val tik0 = System.currentTimeMillis() val tik1 = System.currentTimeMillis() // 총 실행시간 (ms단위) val res = "Time taken : " + (tik1-tik0).toS..