我尝试过配对样本,但它会消耗大量内存,因为 100 个样本会导致 9900 个样本,成本更高。在火花的分布式环境中计算距离矩阵的更有效方法是什么
这是我正在尝试的伪代码片段
val input = (sc.textFile("AirPassengers.csv",(numPartitions/2)))
val i = input.map(s => (Vectors.dense(s.split(',').map(_.toDouble))))
val indexed = i.zipWithIndex() //Including the index of each sample
val indexedData = indexed.map{case (k,v) => (v,k)}
val pairedSamples = indexedData.cartesian(indexedData)
val filteredSamples = pairedSamples.filter{ case (x,y) =>
(x._1.toInt > y._1.toInt) //to consider only the upper or lower trainagle
}
filteredSamples.cache
filteredSamples.count
上面的代码创建了对,但即使我的数据集包含 100 个样本,通过配对过滤的样本(上面)会产生 4950 个样本,这对于大数据来说可能非常昂贵