5

我需要将压缩文件从一个 AWS S3 文件夹复制到另一个文件夹,并希望将其作为计划的 AWS Glue 作业。我找不到这样一个简单任务的例子。如果你知道答案,请帮忙。答案可能在 AWS Lambda 或其他 AWS 工具中。

非常感谢!

4

8 回答 8

8

您可以这样做,并且可能有使用 AWS Glue 的理由:如果您已链接 Glue 作业并glue_job_#2在成功完成glue_job_#1.

下面的简单 Python 脚本使用库将文件从一个 S3 文件夹 ( source) 移动到另一个文件夹 ( ) ,并可选择删除目录中的原始副本。targetboto3source

import boto3

bucketname = "my-unique-bucket-name"
s3 = boto3.resource('s3')
my_bucket = s3.Bucket(bucketname)
source = "path/to/folder1"
target = "path/to/folder2"

for obj in my_bucket.objects.filter(Prefix=source):
    source_filename = (obj.key).split('/')[-1]
    copy_source = {
        'Bucket': bucketname,
        'Key': obj.key
    }
    target_filename = "{}/{}".format(target, source_filename)
    s3.meta.client.copy(copy_source, bucketname, target_filename)
    # Uncomment the line below if you wish the delete the original source file
    # s3.Object(bucketname, obj.key).delete()

参考:Boto3 Docs on S3 Client Copy

注意:我将f-strings用于生成target_filename, 但 f 字符串仅在 >= Python3.6 中受支持,我相信默认的 AWS Glue Python 解释器仍然是 2.7。

参考: f-strings 上的 PEP

于 2019-01-30T22:31:56.363 回答
3

我认为您可以使用 Glue 来做到这一点,但是使用 CLI 不是更容易吗?

您可以执行以下操作:

aws s3 sync s3://bucket_1 s3://bucket_2

于 2017-12-05T23:09:28.760 回答
2

您可以使用 Glue 来做到这一点,但它不是适合这项工作的工具。

让一个由 S3 创建对象事件触发的 Lambda 作业要简单得多。AWS Docs 上甚至有一个关于(几乎)做这件事的教程。

http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html

于 2017-12-10T20:11:42.253 回答
1

我们最终使用 Databricks 来完成所有工作。

胶水没有准备好。它返回没有意义的错误消息。我们创建了工单,等了五天仍然没有回复。

于 2018-02-05T21:37:27.743 回答
1

S3 API 允许您执行 COPY 命令(实际上是带有标头以指示源 URL 的 PUT)以在存储桶内或存储桶之间复制对象。它用于定期伪造 rename()s,但您可以自己发起呼叫,从任何东西。

无需 D/L 任何数据;在同一个 S3 区域内,副本的带宽约为 6-10 MB/s。

AWS CLI cp 命令可以执行此操作。

于 2018-08-01T20:45:50.173 回答
0

您可以通过将 zip 文件从 s3 下载到tmp/目录,然后将其重新上传到 s3 来做到这一点。

s3 = boto3.resource('s3')

下载文件到本地 spark 目录 tmp:

s3.Bucket(bucket_name).download_file(DATA_DIR+file,'tmp/'+file)

从本地 spark 目录 tmp 上传文件:

s3.meta.client.upload_file('tmp/'+file,bucket_name,TARGET_DIR+file)
于 2018-07-31T17:27:13.133 回答
0

现在您可以用胶水编写 python shell 作业来完成它。只需Type在 Glue 作业创建向导中选择Python Shell. 您可以在其中运行普通的 python 脚本。

于 2019-01-31T19:39:21.243 回答
0

什么都不需要。我相信 aws 数据管道是一个最佳选择。只需使用命令行选项。预定运行也是可能的。我已经试过了。成功工作。

于 2019-08-23T12:53:56.787 回答