3

Scalaでデシジョンツリーシステムを構築していますが、データの一部のエントリに同じ属性があります。「ランダム」ノードタイプを実装して、クエリがトラバースするブランチをランダムに選択できるようにすることでこれを回避しましたが、残りの例をランダムに分割しようとすると「MatchError」が発生します。私の現在のコード:

def splitRandom(examples: Array[String]): Array[String]={
        examples.collect {case x if(r.nextInt(100) < 50) => x}
}

「examples」は文字列の配列であり、各文字列は、すべての属性を持つ単一のデータエントリを含む行です。

4

2 に答える 2

7

collectisDefinedAt同じ条件を2回評価できるため(最初はで、次に2回目で値を計算する)、ランダムな動作には適していません。最初にtrueと表示され、2回目(同じ入力でfalse)と表示された場合、一致は混乱します。filter代わりに使用してください:

examples.filter(_ => r.nextInt(100) < 50)
于 2012-08-23T14:50:03.517 に答える
0

あなたの問題に合った解決策があります:

import util.Random
val shuffled = Random.shuffle(your_array)
val (first, second) = shuffled.splitAt(your_position)

Scalaリストまたは配列に対応するrdd.randomSplitが必要なときに、このトリックを見つけました。

必要に応じて型変換を行うことができます

于 2015-11-16T09:48:35.700 に答える