私は新しいスパークの貢献者です。私はここで説明されたランダムフォレスト分類器、のクラスの重みのサポートを追加したい:私は関数の実装を終えたhttps://issues.apache.org/jira/browse/SPARK-9478spark開発者コードチェックに合格できませんでした。バイナリ互換性エラーが発生しました
と私はここにコードの貢献の指示に従っている:指示でhttps://cwiki.apache.org/confluence/display/SPARK/Contributing+to+Spark#ContributingtoSpark-PreparingtoContributeCodeChanges
、 './dev/run-testsですべてのテストを実行して、コードがコンパイルされ、テストに合格し、スタイルチェックに合格したことを確認します。テストを実行しているとき、私のコードはバイナリ互換性チェックに合格できません。
ログは言う:私はこのクラスのインタフェースを変更する必要があるため
[error] * method this(scala.Enumeration#Value,org.apache.spark.mllib.tree.impurity.Impurity,Int,Int,Int,scala.Enumeration#Value,scala.collection.immutable.Map,Int,Double,Int,Double,Boolean,Int)Unit
in class org.apache.spark.mllib.tree.configuration.Strategy does not have a correspondent in current version
[error] filter with: ProblemFilters.exclude[DirectMissingMethodProblem]("org.apache.spark.mllib.tree.configuration.Strategy.this")
私は、ファイル「org.apache.spark.mllib.tree.configuration.Strategy」に変更しました。私がしたのは次のような新しい入力パラメータを追加することです:
class Strategy @Since("1.3.0") (
@Since("1.0.0") @BeanProperty var algo: Algo,
@Since("1.0.0") @BeanProperty var impurity: Impurity,
@Since("1.0.0") @BeanProperty var maxDepth: Int,
@Since("1.2.0") @BeanProperty var numClasses: Int = 2,
@Since("1.0.0") @BeanProperty var maxBins: Int = 32,
@Since("1.0.0") @BeanProperty var quantileCalculationStrategy: QuantileStrategy = Sort,
@Since("1.0.0") @BeanProperty var categoricalFeaturesInfo: Map[Int, Int] = Map[Int, Int](),
@Since("1.2.0") @BeanProperty var minInstancesPerNode: Int = 1,
@Since("1.2.0") @BeanProperty var minInfoGain: Double = 0.0,
@Since("1.0.0") @BeanProperty var maxMemoryInMB: Int = 256,
@Since("1.2.0") @BeanProperty var subsamplingRate: Double = 1,
@Since("1.2.0") @BeanProperty var useNodeIdCache: Boolean = false,
- @Since("1.2.0") @BeanProperty var checkpointInterval: Int = 10) extends Serializable {
+ @Since("1.2.0") @BeanProperty var checkpointInterval: Int = 10,
+ @Since("2.0.0") @BeanProperty var classWeights: Array[Double] = Array(1, 1))
どうすればこの問題を解決できますか、デバッグの方向は?
--------------------------------更新------------ ------------------
私はこの問題をJIRAでプルリクエストした作者の一人ではありません。同じ目標を達成するために必要なメモリが少なくて済みました。私のコードはここにあります:https://github.com/n-triple-a/spark、ブランチ 'weightedRandomForest'には上記の問題があります。
私は現在、このような第13のparams(又はclassWeights引数リスト内せず)を有する戦略クラスのコンストラクタを追加することによってこの問題を解決することができます。私も変化
this(var algo: Algo,
impurity: Impurity,
maxDepth: Int,
numClasses: Int,
maxBins: Int,
quantileCalculationStrategy: QuantileStrategy,
categoricalFeaturesInfo: Map[Int, Int],
minInstancesPerNode: Int,
minInfoGain: Double,
maxMemoryInMB: Int,
subsamplingRate: Double,
useNodeIdCache: Boolean,
checkpointInterval: Int) {
this(algo, impurity, maxDepth, numClasses, maxBins,
quantileCalculationStrategy, categoricalFeaturesInfo, minInstancesPerNode,
minInfoGain, maxMemoryInMB, subsamplingRate, useNodeIdCache,
checkpointInterval, Array(1.0, 1.0))
}
をスカラスタイルの定義では、関数に許容される最大引数数が定義されています。デフォルトは10です。しかし、クラスにバインドされているデフォルト値があるので、私にとっては変です。冗長コンストラクタを追加する必要があるのはなぜですか?
PRに関連する12の変更されたファイルに記載されている 'Strategy'ファイルが表示されません。 – javadba
不明な点をおかけして申し訳ございません。私は説明を更新しました。お気軽に他の質問をしてください。 – Vincent