SampleByKey的取样方法是将密钥转换为哈希值,从中得到一个双值,然后根据提供的概率进行测试。 从一个密钥中得到的双值是均匀分布在0和1之间的。 代号 鏈接.所有具有相同键的行,都会以这种方式进行采样。
我有一个Dataframe,它是通过对多个Dataframe(它们都有相同的模式)进行联合操作形成的。我有兴趣做的是,每个单独的数据框有一个 column X
,并说一个值 y
中存在。该值 y
也会出现在其他几个数据框中。如果我对这个数据帧进行取样,无论是单独的还是后联合的,我怎样才能确保被取样的数据包含了所有的数据,这些数据的值是 y
在于 column X
? 类似于SampleByKey的工作方式。
我通过 sample
DataFrame's的API,但好像不是这样工作的.谁能帮帮我!
这是一个 stratified sampling
. Spark有更强大的采样算法实现
您可以将您的 dataframe
到 RDD[(K, V)]
又名 PairRDD
然后你可以使用对rdd函数 sampleByKey
,检查这个 源头-
def sampleByKey(withReplacement: Boolean,
fractions: Map[K, Double],
seed: Long = Utils.random.nextLong): RDD[(K, V)]
更多信息 分层抽样
为了得到所有具有 y
从列 x
// specify the exact fraction desired from each key
val fractions = Map("y" -> 1)// for all rows 1, for 50% rows use 0.5 etc.
// Get an exact sample from each stratum
// here data is RDD[(x, <any_other_col>)]
val exactSample = data.sampleByKeyExact(withReplacement = false, fractions = fractions)