web-dev-qa-db-ja.com

PySpark DataFrameからランダムな行を取得する方法は?

PySpark DataFrameからランダムな行を取得するにはどうすればよいですか?パラメーターとして分数を取るメソッドsample()のみが表示されます。この分数を_1/numberOfRows_に設定すると、結果がランダムになり、行が表示されないことがあります。

RRDには、サンプルに含める要素の数をパラメーターとして取るメソッドtakeSample()があります。各パーティションをカウントする必要があるため、これは遅いかもしれませんが、DataFrameでこのようなものを取得する方法はありますか?

17
DanT

単にtakeSampleRDDを呼び出すことができます:

df = sqlContext.createDataFrame(
    [(1, "a"), (2, "b"), (3, "c"), (4, "d")], ("k", "v"))
df.rdd.takeSample(False, 1, seed=0)
## [Row(k=3, v='c')]

収集したくない場合は、単により高い割合で制限することができます。

df.sample(False, 0.1, seed=0).limit(1)
44
zero323