I '、クラスの1つでコードを編集した後にmllib sparkモジュールをローカルにビルドしようとしました。 How to build Spark Mllib submodule individually をしかし、私はMavenを使用してモジュールをビルドする際に、結果.jar
は、リポジトリ内のバージョンのようなもので、クラスは私のコードを持っていない:spark-mllibをローカルで修正してビルドする
私は、このソリューションを読みました。
BisectingKmeans.scala
クラスを修正しました。これは、github https://github.com/apache/sparkの1つのプルリクエストで行われた修正の1つが、最後のリリースジェットに含まれていないためです。
私が構築しようとしているバージョン:
/**
* Updates assignments.
* @param assignments current assignments
* @param divisibleIndices divisible cluster indices
* @param newClusterCenters new cluster centers
* @return new assignments
*/
private def updateAssignments(
assignments: RDD[(Long, VectorWithNorm)],
divisibleIndices: Set[Long],
newClusterCenters: Map[Long, VectorWithNorm]): RDD[(Long, VectorWithNorm)] = {
assignments.map { case (index, v) =>
if (divisibleIndices.contains(index)) {
val children = Seq(leftChildIndex(index), rightChildIndex(index))
val newClusterChildren = children.filter(newClusterCenters.contains(_))
if (newClusterChildren.nonEmpty) {
val selected = newClusterChildren.minBy { child =>
KMeans.fastSquaredDistance(newClusterCenters(child), v)
}
(selected, v)
} else {
(index, v)
}
} else {
(index, v)
}
}
}
とビルド:これに
/**
* Updates assignments.
* @param assignments current assignments
* @param divisibleIndices divisible cluster indices
* @param newClusterCenters new cluster centers
* @return new assignments
*/
private def updateAssignments(
assignments: RDD[(Long, VectorWithNorm)],
divisibleIndices: Set[Long],
newClusterCenters: Map[Long, VectorWithNorm]): RDD[(Long, VectorWithNorm)] = {
assignments.map { case (index, v) =>
if (divisibleIndices.contains(index)) {
val children = Seq(leftChildIndex(index), rightChildIndex(index))
val selected = children.minBy { child =>
KMeans.fastSquaredDistance(newClusterCenters(child), v)
}
(selected, v)
} else {
(index, v)
}
}
}
:
mllib 2.11
spark: 2.1.0
に私はこれからBisectingKameans.scala
クラスを変更する必要があります。 しかし、私はそれを行う方法を知らない。