我尝试过对样本进行配对,但由于100个样本会导致9900个样本,这样会消耗大量的内存。在spark分布式环境中,有哪些更有效的计算距离矩阵的方法?
下面是我正在尝试的伪代码片段
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个样本,通过对过滤后的样本(filteredSamples)进行配对操作,结果会产生4950个样本,这对于大数据来说可能非常昂贵。