我试图从两个数据帧中取出样本,其中我需要保持计数的比率.例如
df1.count() = 10
df2.count() = 1000
noOfSamples = 10
Run Code Online (Sandbox Code Playgroud)
我想以这样一种方式对数据进行采样,即每个样本大小为101个样本(1个来自df1,100个来自df2)
现在这样做,
var newSample = df1.sample(true, df1.count() / noOfSamples)
println(newSample.count())
Run Code Online (Sandbox Code Playgroud)
这里的分数意味着什么?它可以大于1吗?我检查这个和这个,但没能完全理解它.
无论如何我们还可以指定要采样的行数吗?
我想从数据框中随机选择一些行,我知道样本方法可以做到这一点,但我担心我的随机性应该是统一采样吗?那么,我想知道Spark on Dataframes的示例方法是否统一?
谢谢
我正在尝试使用 Scala 从现有表中执行一个简单的随机样本,其中包含大约 100e6 条记录。
import org.apache.spark.sql.SaveMode
val nSamples = 3e5.toInt
val frac = 1e-5
val table = spark.table("db_name.table_name").sample(false, frac).limit(nSamples)
(table
.write
.mode(SaveMode.Overwrite)
.saveAsTable("db_name.new_name")
)
Run Code Online (Sandbox Code Playgroud)
但它花费的时间太长(据我估计约为 5 小时)。
有用的信息:
我有〜6名工人。通过分析表的分区数我得到:11433
。
我不确定分区/工人的比例是否合理。
我正在使用 Scala 运行 Spark 2.1.0。
我努力了:
移除.limit()
零件。
更改frac
为1.0
、0.1
等
问题:我怎样才能让它更快?
最好的,
RDD SAMPLE如何在spark中工作?它的不同参数的功能是什么,即样本(withReplacement,fraction,seed).
我在网上找不到与'withReplacement'和'seed'参数相关的任何内容.请举例说明.