【问题标题】:Pyspark Save dataframe to S3Pyspark 将数据帧保存到 S3
【发布时间】:2018-02-02 19:15:09
【问题描述】:

我想将数据框保存到 s3,但是当我将文件保存到 s3 时,它会创建带有 ${folder_name} 的空文件,我想在其中保存文件。

保存数据帧的语法:-

f.write.parquet("s3n://bucket-name/shri/test")

它将文件保存在测试文件夹中,但它会在shri 下创建$test

有没有一种方法可以在不创建额外文件夹的情况下保存它?

【问题讨论】:

  • 为了写一个文件,你需要使用一个executor和一个reducer,这违背了Spark分布式特性的目的
  • @cricket_007 评论有点正确。为了写入一个文件,您需要一个分区。您可以使用 spark 的分布式特性,然后在导出到 csv 之前,使用 df.coalesce(1) 返回到一个分区。就你的观点而言,如果你使用一个分区写出,那么将使用一个执行器来写,如果数据量很大,这可能会影响性能。

标签: python amazon-web-services amazon-s3 pyspark


【解决方案1】:

我可以通过使用下面的代码来做到这一点。

df.write.parquet("s3a://bucket-name/shri/test.parquet",mode="overwrite")

【讨论】:

  • 感谢 Usman 的回复,是否有需要导入的模块,因为当我尝试相同时,我收到错误。Traceback(最近一次调用最后一次):文件“” ,第 1 行,在 NameError: name 'overwrite' is not defined
  • 在引号中给出覆盖值,即 mode='overwrite'
【解决方案2】:

据我所知,没有办法控制实际 parquet 文件的命名。当您将数据框写入 parquet 时,您指定目录名称,spark 在该目录下创建适当的 parquet 文件。

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 2019-11-07
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2021-11-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多