1

データフレームがあり、データフレーム内の行をランダム化する必要があります。私は1の割合を与えることでデータをサンプリングしようとしましたが、これはうまくいきませんでした(興味深いことに、これはパンダで動作します)。pyspark:データフレーム内の行のランダム化

答えて

5

これはPandasで動​​作します。これは、ローカルシステムでのサンプルの取得は、通常、データの入れ替えによって解決されるためです。一方のスパークは、データを線形スキャンすることによってシャッフルを回避します。つまり、Sparkでサンプリングすると、オーダーではなくサンプルのメンバーがランダム化されます。

from pyspark.sql.functions import rand 

df = sc.parallelize(range(20)).map(lambda x: (x,)).toDF(["x"]) 
df.orderBy(rand()).show(3) 

## +---+ 
## | x| 
## +---+ 
## | 2| 
## | 7| 
## | 14| 
## +---+ 
## only showing top 3 rows 

を、それは次のとおりです:

あなたは、ランダムな数字の列でDataFrameを注文することができ

  • 高価な - それは完全なシャッフルを必要とするため、それは何か、あなたは一般的に避けたいです。
  • 疑問 - DataFrameの値の順番は、それほど重要ではない場合があり、DataFrameはインデックス作成をサポートしていないため、収集することは比較的無駄です。
関連する問題