如何使用Spark DataFrames进行分层抽样?

时间:2015-05-12 14:24:54

标签: apache-spark apache-spark-mllib

我在Spark 1.3.0中,我的数据在DataFrames中。 我需要像sampleByKey(),sampleByKeyExact()这样的操作。 我看到了JIRA“向DataFrame添加近似分层抽样”(https://issues.apache.org/jira/browse/SPARK-7157)。 这是Spark 1.5的目标,直到它成功,这是在DataFrames上完成相当于sampleByKey()和sampleByKeyExact()的最简单方法。 谢谢&问候 MK

1 个答案:

答案 0 :(得分:3)

Spark 1.1 added分层抽样例程SampleByKeySampleByKeyExact到Spark Core,因此从那时起它们就没有MLLib依赖。

这两个函数是PairRDDFunctions,属于键值RDD[(K,T)]。此外,DataFrames没有密钥。您必须使用底层RDD - 如下所示:

val df = ... // your dataframe
val fractions: Map[K, Double] = ... // specify the exact fraction desired from each key

val sample = df.rdd.keyBy(x=>x(0)).sampleByKey(false, fractions)

请注意,sample现在是RDD而不是DataFrame,但您可以轻松将其转换回DataFrame,因为您已经为df定义了架构。