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

3
我在使用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个回答

4

Spark 1.1 增加了 分层抽样例程 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,但是由于您已经定义了df的模式,因此您可以轻松地将其转换回DataFrame。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接