サンプルをペアリングしようとしましたが、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 個のサンプルが含まれている場合でも、filteredSamples (上記) をペアリングすると 4950 サンプルになり、ビッグデータには非常にコストがかかる可能性があります