私の主な目標は、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")
私はこれをGlueジョブに実装しようとしました:
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 にバケット属性がないというエラーが表示されます。便宜上、この ETL 作業はすべて接着剤で保持することをお勧めします。
私は AWS に非常に慣れていないので、アドバイスを歓迎します。