所以我说我有100万用户,我用'm using SparkML' s pyspark.ml.stat.Correlation.corr
来计算用户对之间的Pearson相关性 . 通过文档,这个方法returns:
包含向量列的相关矩阵的DataFrame . 此DataFrame包含单行和单个名称为'$ METHODNAME($ COLUMN)'的列 .
矩阵( DenseMatrix
)本身不是分布式的(local),根据我的理解,它必须适合我的驱动程序机器的内存 .
题:
-
包含此矩阵的数据框是否跨越多台机器?我知道Spark分区数据框架,但我认为这是多行的情况?
-
如何使这个巨大的局部矩阵分布式RDD /数据帧(所以我可以 do things )?如果它是本地的,我无能为力 .
thisMatrix = thisDataFrame.take(1)[0][0]
sc.parallelize(thisMatrix.toArray())
将无法工作(因为它将矩阵提取到一台机器) .
1 回答
我想你可能会误解一下这些文档 .
Corelation.corr
返回DataFrame
,与任何其他PysparkDataFrame
完全一样 . 如果您要执行以下呼叫:没有数据将被发送回驱动程序节点 . 这将是真实的,直到在
pearsonCorr
上调用实际操作,例如collect
. Correlation docs中提到的DenseMatrix
实际上是collect
调用的结果,而不是对Correlation.corr
本身的调用: