apache-spark - 将 Spark 数据帧转换为 Spark DenseMatrix 进行操作

标签 apache-spark pyspark apache-spark-sql apache-spark-mllib

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

如何在 Spark 2 中简单地实现这一目标?

最佳答案

了解 Spark 中的 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 格式,我建议您使用 RowMatrix pyspark.mllib.linalg.distributed 中的构造函数

将 rdd 转换为密集矩阵非常简单,如下所示

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

关于apache-spark - 将 Spark 数据帧转换为 Spark DenseMatrix 进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42308389/

相关文章:

apache-spark - 通过 Hadoop 输入格式示例用于 pyspark 的 BigQuery 连接器

elasticsearch - sbt 无法解析来自 sonatype 快照的依赖关系

hadoop - 从 kafka Spark 流接收时获取空值

python - 从 PySpark 中 Groupby 之后的另一列的值获取最小值和最大值

java - Spark CSV Reader 引用数字

scala - Spark:如何告诉Spark使用本地hadoop而不是其嵌入式hadoop?

java - PySpark:java.lang.OutofMemoryError:Java 堆空间

python - 如何使用spark session 导入python文件?

mysql - 无法从 pyspark 连接到 Mysql 数据库,出现 jdbc 错误

java - transient 变量如何在 Worker 上可用