【问题标题】:Spark write to S3 SaveMode.AppendSpark 写入 S3 SaveMode.Append
【发布时间】:2016-10-27 21:02:48
【问题描述】:

使用预先存在的数据集

s3://data/id=1/file.parquet
s3://data/id=2/file.parquet

以及传入的数据帧

/data/id=3/

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

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

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

【问题讨论】:

    标签: apache-spark amazon-s3 parquet


    【解决方案1】:

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

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

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

    因为这是追加,所以没有冲突。

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

    【讨论】:

    • 是否将所有数据(id=1,id=2)复制到_temporary目录下?
    • 不在此用例中。只有当前写入的内容才会被写入 _temporary.. 如果在单次写入中(例如 spark.write.partitionBy(col("id")).parquet("path")) 您有多个 id,那么它将被写入到_临时
    猜你喜欢
    • 2018-10-21
    • 2020-08-28
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    相关资源
    最近更新 更多