0

我有一个大的 pyspark 数据框,其中的列是一些产品,行是它的价格。我需要计算所有产品的协方差矩阵,但是数据太大而无法转换为pandas数据框,所以我需要用pyspark来做。我到处搜索它,但我无法找到解决这个问题的方法。有谁知道如何做到这一点?

我已经有了相关矩阵,所以任何使用标准差对角矩阵的方法也非常受欢迎。

是我的数据框两列的示例。

4

1 回答 1

1

SparkML 中有许多线性代数函数。您可能正在寻找其中一种RowMatrix方法,特别是 computeCovariance()Spark 文档)。

假设您正在寻找相当于:

dummy = pd.DataFrame([[1,2],[2,1]])
dummy.cov()

然后,您可以从 a 开始dataframe,使用 pyspark 计算协方差矩阵,如下所示:

from pyspark.mllib.linalg.distributed import RowMatrix
from pyspark.ml.feature import VectorAssembler

df = spark.createDataFrame([[1, 2], [2, 1]])
vector_col = "cov_features"
assembler = VectorAssembler(inputCols=df.columns, outputCol=vector_col, handleInvalid="skip")
df_vector = assembler.transform(df).select(vector_col)
mat_df = RowMatrix(df_vector)
mat_df = RowMatrix(df_vector.rdd.map(list))
result_df = mat_df.computeCovariance()

的矢量化dataframe是必需的,因为pyspark.mllib.linalg它正在使用矢量表示。

于 2021-10-12T14:53:45.283 回答