我已經瀏覽了整個互聯網,並且無法找到如何簡單地將spark中的數據框轉換爲矩陣,因此我可以對其執行矩陣操作。將Spark數據框轉換爲Spark DenseMatrix進行操作
我該如何簡單地在Spark 2中實現這一點?
我已經瀏覽了整個互聯網,並且無法找到如何簡單地將spark中的數據框轉換爲矩陣,因此我可以對其執行矩陣操作。將Spark數據框轉換爲Spark DenseMatrix進行操作
我該如何簡單地在Spark 2中實現這一點?
瞭解火花中的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