Spark中的Dataframe coalesce是否保留顺序?

问题描述 投票:0回答:1

我使用coalesce(1)将一个Dataframe写到单个文件中,像这样。

df.coalesce(1).write.format("csv")
  .option("header", true).mode("overwrite").save(output_path)

快速浏览一下文件,就会发现顺序被保留了,但总是这样吗?如果顺序没有被保留,我怎么才能执行呢?RDD 的 coalesce 函数有一个额外的参数来禁止洗牌,但 Dataframe 的 coalesce 方法只需要一个参数。

dataframe apache-spark rdd shuffle
1个回答
1
投票

如果你读取一个文件(sc.read.text)的行文。DataFrame/Dataset/RDD 将按照它们在档案中的顺序。

list, map, filter,coalesce and flatMap 保留顺序。 sortBy, partitionBy and join 不保留顺序。

原因是,大多数 DataFrame/Dataset/RDD 操作工作在分区里面的Iterators上。所以map或者filter就是没有办法打乱顺序。

在如果你选择使用 HashPartitioner 并调用调用 map 关于 DataFrame/Dataset/RDD 将改变键。在这种情况下,您可以使用 partitionBy 来用洗牌的方式恢复分区。


0
投票

我不这么认为,因为你怎么知道会发生凝聚 "到 "哪个节点?

© www.soinside.com 2019 - 2024. All rights reserved.