Spark 写入 S3 SaveMode.Append

aut*_*con 5 amazon-s3 apache-spark parquet

使用预先存在的数据集

s3://data/id=1/file.parquet
s3://data/id=2/file.parquet
Run Code Online (Sandbox Code Playgroud)

和传入的数据帧

/data/id=3/
Run Code Online (Sandbox Code Playgroud)

如果传入的数据写入SaveMode.Append

df.write.partitionBy("id").mode(SaveMode.Append).parquet("s3://data/")

如果预先存在的数据集中的任何数据将被复制到创建的临时目录,会怎么样?

Tal*_*ffe 5

我的 Spark 应用程序中有一个非常相似的用例,但我不确定您的问题到底是什么,所以我将尝试一般性地解释。

在写入 id=3 的数据时,您建议的现有数据将保持不变,并且数据将附加到 s3://data/id=3 下的 s3://data/ 中。

使用partitionBy时,路径是基本路径,因此如果您使用覆盖模式,现有文件(s3://data/id=1/ ,s3://data/id=2/)将被删除。

由于这是追加,因此不存在冲突。

您询问了临时目录。如果您的意思是 Hadoop 输出提交者在提交文件之前使用 _temporary 目录来写入文件,那么在写入数据时只有与上次写入相关的文件才会存在,一旦提交,它们就会被删除。