【发布时间】:2019-05-10 19:00:44
【问题描述】:
所以我在 Spark 中尝试协同过滤。假设我有 100 万用户,我正在使用 SparkML 的 pyspark.ml.stat.Correlation.corr 来计算用户对之间的 Pearson 相关性。通过文档,这个方法returns:
包含向量列的相关矩阵的 DataFrame。此 DataFrame 包含名称为“$METHODNAME($COLUMN)”的单行和单列。
矩阵 (DenseMatrix) 本身不是分布式的 (local),据我了解,它必须适合我的驱动程序机器的内存。
问题:
包含此矩阵的数据框是否跨越多台机器?我知道 Spark 分区数据框,但我认为多行是这种情况?
我怎样才能使这个巨大的本地矩阵分布式 RDD/数据帧(这样我就可以做事)?如果它是本地的,我无能为力。
thisMatrix = thisDataFrame.take(1)[0][0]
sc.parallelize(thisMatrix.toArray())
不起作用(因为它将矩阵提取到一台机器中)。
【问题讨论】:
-
计算逐项相似性将使矩阵更小(在我看来仍然很大),但我很想知道如何解决我的问题一般 .
标签: python apache-spark pyspark apache-spark-mllib apache-spark-ml