将 Spark 数据帧转换为 Spark DenseMatrix 以进行操作

Posted

技术标签:

【中文标题】将 Spark 数据帧转换为 Spark DenseMatrix 以进行操作【英文标题】:Transforming Spark dataframe into a Spark DenseMatrix for operations 【发布时间】:2017-02-17 22:22:56 【问题描述】:

我浏览了整个互联网,但找不到如何简单地将 spark 中的数据帧转换为矩阵,以便我可以对其进行矩阵运算。

我怎样才能在 Spark 2 中简单地实现这一点?

【问题讨论】:

【参考方案1】:

了解 Spark 中的 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])

但是,您必须将所有行传递到一个大列表中,这完全违背了使用 spark 的目的。

如果您只想在数据帧上进行矩阵运算并且不依赖 DenseMatrix 格式,我建议您使用 pyspark.mllib.linalg.distributed 中的 RowMatrix 构造函数

将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

【讨论】:

以上是关于将 Spark 数据帧转换为 Spark DenseMatrix 以进行操作的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 将 Dask 数据帧转换为 Spark 数据帧

将 Pandas 数据帧转换为 Spark 数据帧的 TypeError

Databricks:如何将 %python 下的 Spark 数据帧转换为 %r 下的数据帧

将Pandas数据帧转换为Spark数据帧错误

将包含 Vector 作为特征的 Spark 数据帧转换为 CSV 文件

如何将 Spark 数据帧转换为 Pandas 并返回 Kedro?