우노
[Spark] Breeze의 Vector, Matrix 연산 본문
참고 사이트
- github
- Quickstart
- Quickstart
Breeze의 Vector ( SparseVector , DenseVector)
// 각 SparseVector, DenseVector 라이브러리 호출
import breeze.linalg.SparseVector
import breeze.linalg.DenseVector
// SparseVector 생성 (컬럼형태)
val sv = new SparseVector(Array(0,2), Array(1,2), 3)
// DenseVector 생성 (컬럼형태)
val dv = new DenseVector(Array(1,2,3))
// breeze가 제공하는 vector 연산 경우의 수
sv dot sv // SparseVector x SparseVector
sv dot dv // SparseVector x DenseVector
dv dot sv // DenseVector x SparseVector
dv dot dv // DenseVector x DenseVector
Breeze의 Matrix ( CSCMatrix , DenseMatrix )
CSCMatrix
// CSCMatrix 라이브러리 호출 import breeze.linalg.CSCMatrix // CSCMatrix(로우형식) 생성 // 각 튜플이 로우형식으로 들어간다. val bz_sm = CSCMatrix((1,0),(11,0),(0,1)) // CSCMatrix(CSC형식) 생성 // 열 순서대로 데이터 배열(values), 행크기(numRows), 열크기(numCols), 열 압축 정보 배열(colPtrs), 열 순서대로 데이터의 행 인덱스 배열(rowIndices) val bz_sm1 = new CSCMatrix(Array(1.0,7.0,3.0), 2, 3, Array(0,1,2,3), Array(0,1,0)) // CSCMatrix(COO형식) 생성 // 행렬좌표형식의 튜플을 하나씩 넣어 생성하는 방식 val builder = new CSCMatrix.Builder[Double](rows=3, cols=2) builder.add(0,0, 1) builder.add(1,1, 5) builder.add(2,1, 6) val bz_sm2 = builder.result() // CSCMatrix(COO형식) 생성 // 행렬좌표형식의 파일을 사용해 생성하는 방식 val rdd = sc.textFile("s3://non-square-matrix/M_633432_10000_55420_0.000009.txt/part-00000") val rdd_line = rdd.map(x => x.split(" ")).map(x => (x(0).toInt,x(1).toInt,x(2).toDouble)).collect val builder = new CSCMatrix.Builder[Double](rows=633432,cols=10000) for (x <- rdd_line) builder.add(x._1,x._2,x._3) val bz_sm3 = builder.result() // breeze가 제공하는 CSCMatrix 연산 경우의 수 bz_sm * bz_sm.t // SparseMatrix x SparseMatrix = SparseMatrix bz_sm * bz_dm.t // SparseMatrix x DenseMatrix = DenseMatrix bz_sm.t * sv // SparseMatrix x SparseVector bz_sm.t * dv // SparseMatrix x DenseVector sv.t * bz_sm // SparseVector x SparseMatrix dv.t * bz_sm // DenseVector x SparseMatrix
DenseMatrix
// DenseMatrix 라이브러리 호출 import breeze.linalg.DenseMatrix // 3 x 2 DenseMatrix 생성 // 컬럼순서대로 생성된다. val bz_dm = new DenseMatrix(3,2,Array(1,11,0,0,0,1)) // 요소가 전부 0으로 채워진 DenseMatrix 생성 val bz_dm1 = DenseMatrix.zeros[Double](10,10) // breeze가 제공하는 DenseMatrix 연산 경우의 수 bz_sm * bz_dm.t // DenseMatrix x SparseMatrix = DenseMatrix bz_dm * bz_dm.t // DenseMatrix x DenseMatrix = DenseMatrix bz_dm.t * sv // DenseMatrix x SparseVector bz_dm.t * dv // DenseMatrix x DenseVector dv.t * bz_dm // DenseVector x DenseMatrix
결론
- Breeze는 SparseVector x DenseMatrix를 제외한 15가지 곱셈 가능!
'Data > Spark' 카테고리의 다른 글
[Spark] SparkConf, spark-shell, spark-submit, spark-defaults.conf 적용 예 (0) | 2020.07.10 |
---|---|
[Spark] spark.driver.maxResultSize 오류 (0) | 2020.07.10 |
[Spark] Local file에 write하기 (0) | 2020.07.09 |
[Spark] Spark의 Vector, Local Matrix 연산 (0) | 2020.07.09 |
[Spark] SBT(Simple Build Tool) 설치하기 (0) | 2020.07.07 |
Comments