【问题标题】:PySpark dataframe sample descriptionPySpark 数据框示例说明
【发布时间】:2020-03-10 04:40:59
【问题描述】:

我有一个包含 500 万行的 PySpark DataFrame,并且想要获取随机选择的子集的描述。

当我生成相同分数的两个不同样本时,我得到相同的结果。

sample_1 = df.sample(fraction=0.03, seed=None)

sample_1.describe().show(100)
+-------+--------------------+
|summary|            row_name|
+-------+--------------------+
|  count|              160933|
|   mean|2.921313376194685...|
| stddev| 3.50815577432219E13|
|    min|            10111444|
|    max|            99955723|
+-------+--------------------+

sample_2 = df.sample(fraction=0.03, seed=None)

sample_2.describe().show(100)

+-------+--------------------+
|summary|            row_name|
+-------+--------------------+
|  count|              160933|
|   mean|2.921313376194685...|
| stddev| 3.50815577432219E13|
|    min|            10111444|
|    max|            99955723|
+-------+--------------------+
sample_1 == sample_2
False

两个不同的dataframe的描述怎么会一样呢?

SparkContext().version = '2.4.4'

【问题讨论】:

  • 每次调用都更换种子怎么样?
  • 我试过了,结果还是一样。
  • 刚刚测试的结果相同,每次采样都会得到不同的结果

标签: python pyspark pyspark-sql pyspark-dataframes


【解决方案1】:

我最初的猜测是seed 是一样的。

如果您不关心可重复性,请为每个采样使用随机种子。 如果您想要重现性,请为每次采样使用一个恒定但不同的种子。

关于相等性,Spark 比较数据帧的方式可能在幕后发生了一些事情。

当你运行类似的东西时会发生什么:

sample_1.except(sample_2).isEmpty

【讨论】:

  • 我实际上使用相同的代码得到了不同的描述(即使用seed=None
  • 感谢您的回复。现在它起作用了。但我仍然不确定这是否与种子有关,因为seed=None 与随机种子相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多