如何在 spark scala 中重命名 S3 文件而不是 HDFS

How rename S3 files not HDFS in spark scala

我在 S3 中存储了大约 100 万个文本文件。 我想根据文件夹名称重命名所有文件。

我如何在 spark-scala 中做到这一点?

我正在寻找一些示例代码。

我正在使用 zeppelin 来 运行 我的 spark 脚本。

下面的代码我已经按照答案

中的建议进行了尝试
import org.apache.hadoop.fs._

val src = new Path("s3://trfsmallfffile/FinancialLineItem/MAIN")
val dest = new Path("s3://trfsmallfffile/FinancialLineItem/MAIN/dest")
val conf = sc.hadoopConfiguration   // assuming sc = spark context
val fs = Path.getFileSystem(conf)
fs.rename(src, dest)

但是低于错误

<console>:110: error: value getFileSystem is not a member of object org.apache.hadoop.fs.Path
       val fs = Path.getFileSystem(conf)

您可以使用普通的 HDFS API,例如(输入,未测试)

val src = new Path("s3a://bucket/data/src")
val dest = new Path("s3a://bucket/data/dest")
val conf = sc.hadoopConfiguration   // assuming sc = spark context
val fs = src.getFileSystem(conf)
fs.rename(src, dest)

S3A 客户端伪造重命名的方式是 copy + delete 每个文件,因此花费的时间与 #of 文件和数据量成正比。 S3 会限制你:如果你尝试并行执行此操作,它可能会减慢你的速度。如果需要 "a while".

,请不要感到惊讶

您还需要为每次 COPY 调用付费,每 1,000 次调用 0.005,因此您将花费大约 5 美元来尝试。在一个小目录上进行测试,直到您确定一切正常