したがって、iveが3000行のrddを持っていると想定します。最初の2000行はクラス1で、最後の1000行はクラス2です。 RDDは100個のパーティションに分割されています。
RDD.randomSplit(0.8,0.2)
を呼び出すとき
関数はrddもシャッフルしますか?分割は、RDDの20%を連続的にサンプリングするだけですか?または、パーティションの20%をランダムに選択しますか?
理想的には、結果の分割は、元のRDDと同じクラス分布になります。 (つまり、2:1)
ありがとう
weights
配列で定義された範囲ごとに、パーティション分割を保持する個別のmapPartitionsWithIndex
変換があります。
各パーティションは、BernoulliCellSamplers
のセットを使用してサンプリングされます。各分割について、特定のパーティションの要素を反復処理し、次のランダムDouble
の値が正規化された重みによって定義された特定の範囲内にある場合にアイテムを選択します。特定のパーティションのすべてのサンプラーは、同じRNGシードを使用します。それはそれを意味します: