【问题标题】:Sample equal number of keys in Spark RDD在 Spark RDD 中采样相等数量的键
【发布时间】:2016-06-07 09:46:34
【问题描述】:

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

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

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

【问题讨论】:

  • 我不明白你应该澄清什么是a,b,c......以及你喜欢的结构是什么
  • 您在哪里遇到了问题?你得到的实际输出与你期望的比较是什么?

标签: apache-spark partition


【解决方案1】:

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})
}

【讨论】:

    【解决方案2】:

    您需要在您的RDD 上使用reduceByKey 来计算每个人出现的次数,然后使用filter 只获得带有count > 10000 的人

    【讨论】:

    • reduceByKey 不是一个选项。数据集非常庞大,这就是我采样的原因。 ReduceByKey 然后取相等的样本需要很长时间。虽然感谢您的回答。
    猜你喜欢
    • 2017-11-05
    • 2019-05-21
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多