2016-09-09 12 views
0

自分のデータのサブセットをランダムに選択し、それを200エントリに制限したいとします。しかし、sample()関数を使用した後、私は重複した行を取得しています。なぜかわかりません。私にあなたを見せてあげてください:データを複製するspark - sample()関数?

DataFrame df= sqlContext.sql("SELECT * " + 
     "      FROM temptable" + 
     "      WHERE conditions"); 
DataFrame df1 = df.select(df.col("col1")) 
     .where(df.col("col1").isNotNull()) 
     .distinct() 
     .orderBy(df.col("col1")); 
df.show(); 
System.out.println(df.count()); 

これまではすべてがOKです。

+-----------+ 
|col1  |                                           
+-----------+                                           
|  10016|                                           
|  10022|                                           
|  100281|                                           
|  10032|                                           
|  100427|                                           
|  100445|                                           
|  10049|                                           
|  10070|                                           
|  10076|                                           
|  10079|                                           
|  10081|                                           
|  10082|                                           
|  100884|                                           
|  10092|                                           
|  10099|                                           
|  10102|                                           
|  10103|                                           
|  101039|                                           
|  101134|                                           
|  101187|                                           
+-----------+                                           
only showing top 20 rows 

10512 

と10512個のレコードが重複していません。その後!

df = df.sample(true, 0.5).limit(200); 
df.show(); 
System.out.println(users.count()); 

これは、重複の完全な200行を返します。

+-----------+ 
|col1  |                                           
+-----------+                                           
|  10022|                                           
|  100445|                                           
|  100445|                                           
|  10049|                                           
|  10079|                                           
|  10079|                                           
|  10081|                                           
|  10081|                                           
|  10082|                                           
|  10092|                                           
|  10102|                                           
|  10102|                                           
|  101039|                                           
|  101134|                                           
|  101134|                                           
|  101134|                                           
|  101345|                                           
|  101345|                                           
|  10140|                                           
|  10141|                                           
+-----------+                                           
only showing top 20 rows                                         

200 

誰が、なぜ教えてもらえますか?これは私を夢中にさせている。ありがとうございました!

答えて

1

重複を得ることについて、予期しないものは何もありませんので、あなたは明示的に交換したサンプルを頼む:

public Dataset<T> sample(boolean withReplacement, double fraction) 
関連する問題