数千のレコードを持つデータフレームがあり、デモ用に別のデータフレームに1000行をランダムに選択したいと思います。 Javaでこれを行うにはどうすればよいですか?
ありがとうございました!
サンプル()メソッドを試すことができます。 Unfourtunatellyあなたはそこに数ではなく、分数を与えなければなりません。次のような関数を書くことができます。
_def getRandom (dataset : Dataset[_], n : Int) = {
val count = dataset.count();
val howManyTake = if (count > n) n else count;
dataset.sample(0, 1.0*howManyTake/count).limit (n)
}
_
説明:データの一部を取得する必要があります。 2000行あり、100行を取得する場合、合計行の0.5が必要です。 DataFrameにあるよりも多くの行を取得する場合は、1.0を取得する必要があります。 limit()関数が呼び出されて、丸めが正常であり、指定した行より多くの行を取得しなかったことを確認します。
編集:私は別の答えにtakeSampleメソッドを見ます。でも覚えておいて:
dataset.rdd.takeSample(0, 1000, System.currentTimeMilis()).toDF()
takeSampleはすべての値を収集します。行をシャッフルしてから、一番上の行を取得できます。
import org.Apache.spark.sql.functions.Rand
dataset.orderBy(Rand()).limit(n)