0

我的主要目标是让 AWS Glue 将存储在 S3 中的文件移动到 RDS 中的数据库。我当前的问题是我获取这些文件的格式具有 UTF 16 LE 编码,而 AWS Glue 只会处理具有 UTF 8 编码的文本文件。请参阅(https://docs.aws.amazon.com/glue/latest/dg/glue-dg.pdf,第 5 页脚注)。在我的本地机器上,python 可以通过这种方法轻松更改编码:

from pathlib import Path
path = Path('file_path')
path.write_text(path.read_text(encoding="utf16"), encoding="utf8")

我试图在胶水作业中实现这一点:

bucketname = "bucket_name"
s3 = boto3.resource('s3')
my_bucket = s3.Bucket(bucketname)
subfolder_path = "folder1/folder2"
file_filter = "folder2/file_header_identifier"

for obj in my_bucket.objects.filter(Prefix=file_filter):
    filename = (obj.key).split('/')[-1]
    file_path = Path("s3://{}/{}/{}".format(bucketname, subfolder_path, filename))
    file_path.write_text(file_path.read_text(encoding="utf16"), encoding="utf8")

我在 Glue 中没有收到错误,但它没有更改我文件的文本编码。但是当我在 Lambda 中尝试类似的东西(这可能是更明智的服务)时,我确实收到了一个错误,即 s3 没有 Bucket 属性。为方便起见,我更愿意将所有这些 ETL 工作保持在胶水中。

我对 AWS 很陌生,因此欢迎任何建议。

4

0 回答 0