scala Spark中的`sample`和`TableSAMPLE`有什么不同?

ovfsdjhp  于 2022-11-09  发布在  Scala
关注(0)|答案(1)|浏览(178)

我想要创建我的数据的随机子样本。
1.Spark的sample函数(Link)是我想使用的接口。特别是因为它允许我切换采样是在有或没有替换的情况下完成。但是,执行此函数需要很长时间。根据问题Spark sample is too slow的答案,sample似乎需要全表扫描。
1.TableSAMPLE似乎是一种更快的选择,尽管在有或没有替换的情况下切换的能力已经丧失。
我想知道sample和TABLESAMPLE有什么不同,为什么TABLESAMPLE执行得比sample快。TABLESAMPLE是否不需要全表扫描?

6ljaweal

6ljaweal1#

TABLESAMPLE有三种采样方式:

  • 百分比(或分数)**:在引擎盖下,做与样本相同的事情。它用于创建均匀采样。
  • num_row**:在幕后,和Limit做同样的事情,这就是为什么这个接口非常快。
  • Bucket Out Of**:指定总数中需要采样的部分。

文档中说明了这一点:
如果随机性很重要,请始终使用TABLESAMPLE(百分比)。TABLESAMPLE(Num_Rows)不是一个简单的随机样本,而是使用LIMIT实现的。
因此,sampleTABLESAMPLE是否相同的答案是否定的,但是TABLESAMPLEsample使用百分比(分数)是相同的。
如果您想阅读更多关于这方面的内容,Databricks提供了一些关于this的有用信息。

相关问题