获取reduceByKey RDD中的值的数量

时间:2014-07-31 19:25:50

标签: scala apache-spark rdd

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

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

1 个答案:

答案 0 :(得分:0)

0.1。不,这将完全违背减少操作的整个要点 - 即通过利用关联性和可交换性将操作并行化为任意的子操作树。

0.2。你需要通过组合整数monoid和你正在做的事来定义一个新的monoid。我们假设您的操作是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值。

0.3。你必须对第一个四分位数的含义更加具体。鉴于1.的答案是否定的,那么你必须有一个定义第一个四分位数的边界,然后你不需要对数据进行排序,因为你可以按该边界过滤掉这些值。