【问题标题】:Why is repartitionAndSortWithinPartitions not sorting? [duplicate]为什么 repartitionAndSortWithinPartitions 不排序? [复制]
【发布时间】:2017-10-09 10:28:29
【问题描述】:

这是我正在做的:

val rddkv = sc.parallelize(List(("k1",1),("k2",2),("k1",2),("k3",5),("k3",1)))
    //rddkv.collect
    //Array[(String, Int)] = Array((k1,1), (k2,2), (k1,2), (k3,5), (k3,1))

rddkv.repartitionAndSortWithinPartitions(new org.apache.spark.RangePartitioner(3,rddkv)).mapPartitionsWithIndex( (i,iter_p) => iter_p.map(x=>" index="+i+" value="+x)).collect
    //Array[String] = Array(" index=0 value=(k1,1)", " index=0 value=(k1,2)", " index=1 value=(k2,2)", " index=1 value=(k3,5)", " index=1 value=(k3,1)")

请注意,分区内的值未排序。这是为什么?我错过了什么?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    RDD实际上是排序的,你可能误解了OrderedRDDFunctions.repartitionAndSortWithinPartitions方法的工作原理。该方法对键值对(K,V) 的RDD 进行操作,其中K 是键,V 是值。它将重新分区然后对数据进行排序按键

    查看您的输出顺序:(k1,1), (k1,2), (k2,2), (k3,5), (k3,1),它正确排序在键之后。

    如果您只想对值进行排序,而忽略它们所在的分区,您可以简单地执行rdd.sortBy(_._2)

    【讨论】:

      猜你喜欢
      • 2019-07-23
      • 1970-01-01
      • 2014-01-27
      • 2013-08-07
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多