我正在使用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
答案 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"
。再次使用子过程调用它。