오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-16 00:00
관리 메뉴

우노

[Spark] Spark의 Vector, Local Matrix 연산 본문

Data/Spark

[Spark] Spark의 Vector, Local Matrix 연산

운호(Noah) 2020. 7. 9. 14:32

참고 사이트

Spark의 Vector ( SparseVector , DenseVector)

  • 연산 기능이 없다.( spark 3.0.0 이상부터 같은 패키지 내 BLAS.scala 의 dot 사용 가능 )

      // Vectors 라이브러리 호출
      import org.apache.spark.mllib.linalg.Vectors
    
      // SparseVector 생성
      // Sparse( 벡터의 크기, [값 존재하는 인덱스 순서], [인덱스별 값] )
      val sv = Vectors.sparse(3, Array(0,2), Array(1.0,2.0))
    
      // DenseVector 생성
      val dv = Vectors.dense(Array(1.0,2.0,3.0))

Spark의 Local Matrix ( SparseMatrix , DenseMatrix )

  • SparseMatrix

    • reference : https://spark.apache.org/docs/2.0.0/api/java/org/apache/spark/mllib/linalg/SparseMatrix.html

    • github : https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/linalg/Matrices.scala

      // SparseMatrix 라이브러리 호출
      import org.apache.spark.mllib.linalg.SparseMatrix
      
      // SparseMatrix(CSC형식) 생성
      // 행크기(rows), 열크기(cols), 열 압축 정보 배열(colPtrs), 열 순서대로 데이터의 행 인덱스 배열(rowIndices),열 순서대로 데이터 배열(values)
      val sm = new SparseMatrix(2,3,Array(0,1,2,3), Array(0,1,0), Array(1.0,7.0,3.0))
      
      // COO 데이터를 불러와 SparseMatrix(COO형식) 생성
      val rdd =  sc.textFile("s3://non-square-matrix/M_633432_10000_55420_0.000009.txt/part-00000")
      val rdd_iterable = rdd.map(x=>x.split(" ")).map(x => (x(0).toInt, x(1).toInt, x(2).toDouble)).collect.toIterable
      val sm1 = SparseMatrix.fromCOO(633432,10000,rdd_iterable)
      
      // COO 데이터를 생성해 SparseMatrix(COO형식) 생성
      // 행,렬,값 Tuple이 들어가 있는 Array
      val coo = Array((0,0,3.0),(1,1,4.0))
      val sm2 = SparseMatrix.fromCOO(2,2,coo.toIterable)
      
      // Spark가 제공하는 SparseMatrix 연산 경우의 수
      sm.multiply(sv)                    // SparseMatrix * SparseVector
      sm.multiply(dv)                    // SparseMatrix * DenseVector 
      sm.multiply(sm.toDense.transpose)  // SparseMatrix * DenseMatrix = DenseMatrix
  • DenseMatrix

Comments