我想随机选择我的数据子集,然后将其限制为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
谁能告诉我为什么?这真让我抓狂。谢谢!
答案 0 :(得分:2)
您明确要求提供替换样本,因此获取重复项没有任何意外:
public Dataset<T> sample(boolean withReplacement, double fraction)