2017-02-17 152 views

回答

0

瞭解火花中的DenseMatrix會創建一個本地而不是分佈式矩陣,並將所有內容放在單個節點中。一個densematrix可以通過以下方式

# Constructor : DenseMatrix(numRows, numCols, values) 
from pyspark.mllib.linalg import Matrix, Matrices 
dm2 = Matrices.dense(3, 2, [1, 2, 3, 4, 5, 6]) 

創建但是你必須所有的行傳遞到一個單一的大名單這違背了使用火花在所有的目的。

在您尋找的只是在做你的數據幀矩陣運算,而不是掛在DenseMatrix格式的情況下,我建議你使用RowMatrix構造函數pyspark.mllib.linalg.distributed

這是很簡單的一個RDD轉換爲densematrix如下所示

from pyspark.mllib.linalg.distributed import RowMatrix 

# Create an RDD of vectors. 
rows = sc.parallelize([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) 

# Create a RowMatrix from an RDD of vectors. 
mat = RowMatrix(rows) 

# Get its size. 
m = mat.numRows() # 4 
n = mat.numCols() # 3 

在數據幀的情況下,可以簡單地在df.rdd傳遞給RowMatrix構造函數。有關RowMatrix的不同方法的更多詳細信息可以在以下鏈接中找到:https://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#pyspark.mllib.linalg.distributed.RowMatrix

相關問題