2015-10-04 8 views
11

したがって、iveには3000行のrddがあると仮定します。 2000年の第1行はクラス1であり、最後の1000行はクラス2である。 RDDは100個のパーティションに分割されています。スパークRDD.randomSplitは実際にRDDを分割します

機能もRDDをシャッフルしていRDD.randomSplit(0.8,0.2)

を呼び出しますか?私たちは分裂を単に20%連続的にrddのサンプルですか?それとも、20%のパーティションをランダムに選択するのですか?

理想的には、結果の分割に元のRDDと同じクラス分布があります。 (すなわち、2:1)

おかげweightsアレイによって定義された各範囲について

答えて

18

パーティションを保存する別mapPartitionsWithIndex変換があります。

各パーティションは、BernoulliCellSamplersのセットを使用してサンプリングされます。各分割について、与えられたパーティションの要素を反復処理し、次のランダム値Doubleの値が正規化された重みによって定義された所定の範囲内にある場合、項目を選択する。特定のパーティションのすべてのサンプラーは、同じRNGシードを使用します。それはそれを意味します

  • RDDをシャッフルしない
  • がかかる各パーティションからのランダムサンプルを取る偶然以外の連続ブロックをとらない、非重複サンプル
  • nスプリットがデータを渡すことを要求する
関連する問題