Apache spark RDD:重新分区时保留总顺序

Apache spark RDD:重新分区时保留总顺序,apache-spark,pyspark,rdd,Apache Spark,Pyspark,Rdd,关于RDDs()中的顺序,我的一个假设似乎是不正确的 假设我希望在对RDD进行排序后对其重新分区 import random l = list(range(20)) random.shuffle(l) spark.sparkContext\ .parallelize(l)\ .sortBy(lambda x:x)\ .repartition(3)\ .collect() 这将产生: [16, 17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,

关于RDDs()中的顺序,我的一个假设似乎是不正确的

假设我希望在对RDD进行排序后对其重新分区

import random

l = list(range(20))
random.shuffle(l)

spark.sparkContext\
.parallelize(l)\
.sortBy(lambda x:x)\
.repartition(3)\
.collect()
这将产生:

[16, 17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
正如我们所看到的,顺序在一个分区内保持,但总的顺序并不是在所有分区上都保持

我希望保留RDD的总顺序,如下所示:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

我在网上很难找到任何可以帮助我的东西。非常感谢您的帮助。

我们似乎可以向
sortBy
函数提供参数
numPartitions=partitions
,以对RDD进行分区并保留总顺序:

import random

l = list(range(20))
random.shuffle(l)

partitions = 3

spark.sparkContext\
.parallelize(l)\
.sortBy(lambda x:x ,numPartitions=partitions)\
.collect() 

使用coalesce(1)将其设为单分区@Kishore,我处理数十亿行,因此很遗憾,这不起作用。重新分区后排序不是一个选项吗?@shaido,当然会。它会保留分区吗?