根据pyspark中的文件夹名称重命名和移动S3文件

时间:2018-10-09 06:37:26

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

我正在使用partitionBy到S3拧一些数据帧。创建的文件夹结构如下。

root/
    date=2018-01-01/
    date=2018-01-02/

我想将这些文件移动到s3中的另一个目录,并将文件夹重命名为

root1/
       20180101/
       20180102/

有没有办法可以从pyspark实现这一目标?

我还需要在目录内按顺序重命名文件,例如:

root1/
     20180101/FILE_1.csv
     20180101/FILE_2.csv

1 个答案:

答案 0 :(得分:0)

您不能直接重命名S3对象。

因此,实现此目的的一种方法是将对象复制为具有所需名称的对象,然后删除原始对象。

此外,S3存储桶没有目录结构,“目录结构”只是对象键中的前缀。

您有两种选择,要么使用子过程从python调用aws cli,要么使用boto3库将所有文件从一个“目录”复制到另一个。

使用子流程的解决方案:

  import subprocess
  subprocess.check_call("aws s3 sync s3://bucket/root/date=2018-01-01/ s3://bucket/root1/20180101/".split())

sync命令将递归复制。然后,您可以使用 aws s3 rm --recursive "somepath" 。再次使用子过程调用它。