【问题标题】:getting number of values within reduceByKey RDD在 reduceByKey RDD 中获取值的数量
【发布时间】:2014-09-23 21:28:34
【问题描述】:

当调用 reduceByKey 操作时,它正在接收特定键的值列表。我的问题是:

  1. 它收到的值列表是否按排序顺序排列?
  2. 是否有可能知道它收到了多少值?
  3. 我正在尝试计算reduceByKey 中键值列表的第一个四分位数。这可以在 reduceByKey 中实现吗?

【问题讨论】:

  • 我认为你想要 groupByKey,尽管从技术上讲我相信你可以弄乱 reduceByKey 来让它工作
  • 我实际上尝试了 groupByKey,但我在这里读到,如果您不通过 RDD 进行下一步处理,效率会降低mail-archives.apache.org/mod_mbox/spark-user/201402.mbox/…
  • 没错,它没有那么高效,但这就是它更通用的原因

标签: scala apache-spark rdd


【解决方案1】:

.1。不,这完全违背了 reduce 操作的全部要点 - 即通过利用关联性和交换性将操作并行化为任意子操作树。

.2。您需要通过组合整数幺半群以及您所做的任何事情来定义一个新的幺半群。假设您的操作是op 然后 .

yourRdd.map(kv => (kv._1, (kv._2, 1)))
.reduceByKey((left, right) => (left._1 op right._1, left._2 + right._2))

会给你一个RDD[(KeyType, (ReducedValueType, Int))],其中Int是reduce为每个键接收到的值的数量。

.3。您必须更具体地说明第一个四分位数的含义。鉴于 1. 的答案是否定的,那么您必须有一个定义第一个四分位数的界限,然后您就不需要对数据进行排序,因为您可以通过该界限过滤掉值。

【讨论】:

    猜你喜欢
    • 2015-12-09
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多