Dataframe 数据帧是否按顺序合并?
我使用coalesce1将数据帧写入单个文件,如下所示Dataframe 数据帧是否按顺序合并?,dataframe,apache-spark,rdd,shuffle,Dataframe,Apache Spark,Rdd,Shuffle,我使用coalesce1将数据帧写入单个文件,如下所示 df.coalesce(1).write.format("csv") .option("header", true).mode("overwrite").save(output_path) 快速浏览一下该文件,可以看出订单被保留了,但情况总是这样吗?如果不保留该命令,我如何执行该命令?RDD的coalesce函数有一个额外的参数来禁止洗牌,但Dataframe的coalesce方法只接受一个参数。如果读取文件sc.read.text,
df.coalesce(1).write.format("csv")
.option("header", true).mode("overwrite").save(output_path)
快速浏览一下该文件,可以看出订单被保留了,但情况总是这样吗?如果不保留该命令,我如何执行该命令?RDD的coalesce函数有一个额外的参数来禁止洗牌,但Dataframe的coalesce方法只接受一个参数。如果读取文件sc.read.text,Dataframe/Dataset/RDD的行将按照它们在文件中的顺序排列
list、map、filter、coalesce和flatMap保留顺序。
sortBy、partitionBy和join不保留顺序
原因是大多数DataFrame/Dataset/RDD操作在分区内的迭代器上工作。因此,映射或过滤器无法打乱顺序
在这种情况下,如果您选择使用HashPartitioner并调用DataFrame/Dataset/RDD上的invoke map,则会更改键。在这种情况下,您可以使用partitionBy通过随机播放来恢复分区。我不这么认为,因为您如何知道合并将发生到哪个节点?指定合并后的orderBy以强制执行排序可能是大祭司指示答案的时候了。我认为这需要一些努力来解决,虽然已经讨论过了。看看阿维耶采夫·德米特里的回答。目前似乎无法保证最终RDD的订单保留。这是负责合并算法的类