【问题标题】:Overwriting ML model in S3 bucket覆盖 S3 存储桶中的 ML 模型
【发布时间】:2016-10-20 09:42:49
【问题描述】:

我正在将 ML 模型保存到 S3 存储桶。经过长时间的搜索,thread 帮助我找到了解决方案。我的代码如下所示:

sc.parallelize(Seq(model), 1).saveAsObjectFile("s3a://bucket/nameModel.model")

第一次运行这个工作一切都很顺利。第二次得到了

FileAlreadyExistsException:输出目录 “s3a://bucket/nameModel.model”已经存在`

我没有找到覆盖此模型的解决方案。所以我首先尝试在保存之前删除现有模型:

val instanceProfileCredentialsProvider = new com.amazonaws.auth.InstanceProfileCredentialsProvider()
val amazonS3Client = new AmazonS3Client(instanceProfileCredentialsProvider)
amazonS3Client.deleteObject(new DeleteObjectRequest("bucket", "nameModel.model"))
sc.parallelize(Seq(model), 1).saveAsObjectFile("s3a://bucket/nameModel.model")

没有成功,我仍然遇到同样的异常。新代码似乎并没有删除现有模型。是否有其他方法可以从 s3 存储桶中覆盖或删除当前的 ML 模型?

【问题讨论】:

  • 在您的代码中,您在创建“nameModel.model”时删除了“nameModel”。是否只有问题或您的代码中的情况如此?
  • 顺便说一句,您是否尝试过启用版本控制您的 s3 存储桶 docs.aws.amazon.com/AmazonS3/latest/dev/ObjectVersioning.html ?这样你也不会丢失旧模型
  • 我编辑了我的问题。那是一个错字。在我的代码中,我实际上是在尝试删除同名的对象。

标签: scala amazon-s3 apache-spark apache-spark-ml


【解决方案1】:

如何使用org.apache.hadoop.fs.FileSystem。类似的,

def deleteS3Path {
    FileSystem.get(new URI("s3n://mybucket"), 
    sc.hadoopConfiguration).
    delete(new Path("s3n://mybucket/prefix/mykey"), true)
}

这对你有用吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2020-11-23
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多