如何用spark做矩陣計算?
02-07
剛啃完scala和spark兩本書墊底,對矩陣計算非常感興趣,但不知如何下手
謝邀,不過木接觸過spark做矩陣計算,只知道公司之前有個專門的做向量計算的系統,被稱作DVCE(Distributed Vector Computing Engine),底層實現是MPI,可能是因為向量、矩陣的計算中,經常出現一份數據發送給許多結點的情況,使用MPI會很適合。
可以使用我們的spark矩陣演算法庫 支持各種矩陣計算 提供high level的矩陣計算借口 比如矩陣加減乘等 我們有優化器可以優化具體的pipeline 減少了中間結果存儲複雜度 減少了網路shuffle 減少了計算量 我們的系統比spark mlib 和 ibm systemML 快了不是一點半點 Github 地址如下 記得點一個贊
http://github.com/yuyongyang800/SparkDistributedMatrix
先建立稀疏矩陣,然後轉成分塊矩陣相乘。
val matrixNet1 = new CoordinateMatrix(user_tag_matrixNet1_0.map(x =&> MatrixEntry(x._1, x._2, x._3)))
val matrixNet2 = new CoordinateMatrix(user_tag_matrixNet2_0.map(x =&> MatrixEntry(x._1, x._2, x._3)))
val matrix_link = matrixNet1.toBlockMatrix(2048, 2048).multiply(matrixNet2.toBlockMatrix(2048, 2048))
我們是調用jblas來實現的。大矩陣和小矩陣的運算,將小矩陣廣播到各個節點,對大矩陣每一行進行map,在節點用Jblas的函數計算向量和矩陣的乘積。大矩陣和大矩陣,將兩個矩陣分塊乘積,不過矩陣太大速度慢成狗了
想做分散式矩陣計算還不如看看blas/lapack+mpi或者scalapack的書。
推薦閱讀:
※大數據那些事(9):起早貪黑竹籃打水的18摸(IBM)
※還有必要學習Hadoop 么?
※如何高效閱讀 Spark 和 Hadoop 這類大型開源項目源代碼?有什麼工具可以藉助?
※Spark 2017歐洲技術峰會摘要(開發人員分類)
TAG:Spark |