Spark - sample()函数复制数据?

时间:2016-09-09 15:13:35

标签: java apache-spark dataframe

我想随机选择我的数据子集,然后将其限制为200个条目。但是在使用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());

到目前为止,一切正常。我得到了输出:

+-----------+
|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 个答案:

答案 0 :(得分:2)

您明确要求提供替换样本,因此获取重复项没有任何意外:

public Dataset<T> sample(boolean withReplacement, double fraction)