使用S3DistCp groupBy子句

时间:2017-10-29 17:33:19

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

我必须将文件从一个s3存储桶复制到另一个存储桶。源存储桶中有许多文件夹,我们只需从每个文件夹中选择一个文件。例如,下面是样本结构 -

s3://mysrcbucket/CustomerID1/File1
s3://mysrcbucket/CustomerID1/File2
s3://mysrcbucket/CustomerID2/File1
s3://mysrcbucket/CustomerID2/File2
s3://mysrcbucket/CustomerID2/File3

我准备了一个清单列表(将在s3distcp中使用),其中包含我需要为每个客户复制的文件名,例如 -

s3://mysrcbucket/CustomerID1/File2
s3://mysrcbucket/CustomerID2/File3

由于每个客户只需要复制一个文件,因此目标文件名应转换为相应的customerID。像 -

这样的东西
Expected Result
s3://mytrgtbucket/CustomerID1  (this will hold the content of file-CustomerID1/File2)
s3://mytrgtbucket/CustomerID2  (this will hold the content of file-CustomerID2/File3)

我在这里使用groupby子句,我可以使用客户ID创建文件,但是它创建了另一个带有CustomerID的文件夹,例如, -

Current Result
s3://mytrgtbucket/CustomerID1/CustomerID1
s3://mytrgtbucket/CustomerID2/CustomerID2.

我使用的命令是 -

s3-dist-cp --src=s3://mysrcbucket/ --dest=s3://mytrgtbucket/ --copyFromManifest --previousManifest=s3://mysrcbucket/manifest.gz --groupBy='.*(CustomerID\d)/.*'

是否可以采取措施来实现 预期结果 ,而不是 当前结果

1 个答案:

答案 0 :(得分:0)

我通过修改清单文件使其工作。

早期版本 -

{"path":"s3://mytrgtbucket/CustomerID1/File2.txt","srcDir":"s3://mytrgtbucket/"}
{"path":"s3://mytrgtbucket/CustomerID2/File3.txt","srcDir":"s3://mytrgtbucket/"}

工作版本

{"path":"s3://mytrgtbucket/CustomerID1/File2.txt","srcDir":"s3://mytrgtbucket/CustomerID1/"}
{"path":"s3://mytrgtbucket/CustomerID2/File3.txt","srcDir":"s3://mytrgtbucket/CustomerID2/"}