Spark Sampling - 比使用完整的RDD / DataFrame快多少

时间:2015-11-06 08:17:03

标签: java apache-spark apache-spark-sql

我想知道在采样RDD / DF时,Spark的运行时间与完整RDD / DF的运行时间相比。我不知道它是否有所作为,但我目前正在使用Java + Spark 1.5.1 + Hadoop 2.6。

Mozilla Firefox

我希望采样最快接近~90%。但对我来说,看起来火花穿过整个DF或进行计数,这基本上与完整的DF选择几乎相同。生成样本后,它将执行select。

我对这个假设是否正确,或者是以错误的方式使用的采样是什么导致我最终选择了两个选择所需的运行时间?

1 个答案:

答案 0 :(得分:1)

  

我希望采样最快接近~90%。

嗯,这些期望不切实际的原因有几个:

  • 在没有任何关于数据分布的假设的情况下,为了获得统一的样本,您必须执行完整的数据集扫描。这或多或少是在Spark
  • 中使用sampletakeSample方法时发生的情况
  • SELECT *是一个相对轻量级的操作。根据您有时间处理单个分区的资源量可以忽略不计
  • 采样不会减少分区数量。如果您没有coalescerepartition,最终可能会出现大量几乎空的分区。这意味着资源使用次优。
  • 虽然RNG通常非常有效,但是生成随机数并不是免费的

采样至少有两个重要的好处:

  • 降低内存使用量,包括减少垃圾收集器的工作量
  • 在洗牌或收集时序列化/反序列化和传输的数据较少

如果你想从采样中获得最多,那么采样,合并和缓存是有意义的。