在Spark RDD中采样相同数量的键

时间:2016-02-24 21:23:46

标签: apache-spark partition

我有一个键值RDD,其中键可以是15之间的任何值。 RDD中的记录数量以百万计。我需要输出每个密钥有10,000条记录的RDD。

示例RDD [(String,String)]用于3个不同的键:

1 a
2 b
3 b
2 c
1 d
2 e
2 f
2 c
1 d
3 e
2 f

如果我需要每个键的两个任意2条记录,输出可能是:

1 a
1 f
2 c
2 d
3 c
3 d

2 个答案:

答案 0 :(得分:2)

sampleByKeyExact应该这样做:

def sampleByKeyUniform[T: ClassTag, U: ClassTag](
    rdd: RDD[(T, U)], n: Long, withReplacement: Boolean = false) = {
  rdd.sampleByKeyExact(withReplacement,
    rdd.countByKey.map{case (k, v) => k -> n.toDouble / v})
}

答案 1 :(得分:0)

您需要在reduceByKey上使用RDD来计算每次显示的次数,然后使用filter来获取count > 10000

的人