有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spark sample()函数是否复制数据?

我想随机选择数据的一个子集,然后将其限制为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) 个答案

  1. # 1 楼答案

    您明确要求更换样品,这样就不会出现重复样品的意外情况:

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