【问题标题】:How to write data in the dataframe into single .parquet file(both data & metadata in single file) to Amazon S3?如何将数据框中的数据写入单个 .parquet 文件(单个文件中的数据和元数据)到 Amazon S3?
【发布时间】:2019-07-11 10:20:34
【问题描述】:

我正在尝试根据 S3 的某些键(按名称分区)将 DF 写入单个镶木地板文件。我的要求是每次运行都将数据附加到同一个 parquet 文件中。

这是我使用的代码,但此代码为该文件夹内的每个名称创建了文件夹,每次运行它都会创建新的镶木地板文件。但是,我的要求是写入单个文件。

df.coalesce(1).write.partitionBy("name").format("parquet").mode(SaveMode.Append).option("fileType", "parquet").save("s3n://ialert-data/store-streaming-data/")

【问题讨论】:

    标签: apache-spark amazon-s3


    【解决方案1】:

    您需要使用重新分区而不是分区,并在重新分区后合并。

    df.repartition(df("name")).coalesce(1).write.mode(SaveMode.Append).parquet("s3n://ialert-data/store-streaming-data/")
    

    【讨论】:

    • 感谢您的回复。我已经尝试过您的方法,它仍然为每次运行创建新的镶木地板文件,并且它没有根据名称分离数据。我需要基于名称的文件,并且每次运行我们都需要附加到相同的文件。请帮忙。
    • 如果你使用write.mode(SaveMode.Append),它每次运行时总是只添加一个文件。如果要单个文件,则需要加载所有数据,重新分区,然后将其全部写回单个文件。
    • 我已经尝试了 about 的建议,它可以将多个 parquet 文件合并为单个大文件。但是,对于下一次运行,它会再次创建新文件。无论如何,我都想为每次运行写入单个镶木地板文件。
    • 任何能够以附加模式写入现有 parquet 文件的 AWS 服务或任何程序。
    猜你喜欢
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2019-07-03
    • 2018-07-18
    • 1970-01-01
    • 2019-12-22
    • 2012-04-26
    相关资源
    最近更新 更多