如何使用AWS Glue作业在目标输出文件中保留源文件名

0

【以下的问题经过翻译处理】 正在运行的Glue作业,需要将S3中包含日期标记的一些源数据文件转换为不同格式(CSV到Parquet)。目标文件将放置在不同的S3存储桶中。测试时,Glue没有保留源文件名。S3目标文件中如何保留日期标记?

profile picture
专家
已提问 5 个月前20 查看次数
1 回答
0

【以下的回答经过翻译处理】 Glue是一个数据目录,它按照数据库和表的方式组织数据。尽管底层数据存储层可以是S3,但Glue并不关心S3上对象的名称。因此,Glue是文件或S3对象的更高层抽象。从这个意义上说,客户在尝试实现其目标时使用了错误的工具。

如果目标是处理单个文件或S3对象,则可能需要编写一个简单的Python脚本来实现其目标。这可以很容易地通过使用boto3和pandas组合来完成。简而言之,首先使用boto3进行ListObjects,然后为每个对象执行转换。

下面是一个示例代码,它将CSV转换为Parquet并保留文件名。要运行此代码,他们需要拥有boto3,pandas,fsspec,pyarrow和s3fs:

import pandas as pd

def convert(src_bucket, src_key, dest_bucket, dest_prefix=None): src= 's3://' + src_bucket + '/' + src_key # extract the source filename filename = src_key[src_key.rfind("/")+1:] # form the output destination if dest_prefix is None: dest= 's3://' + dest_bucket + '/' + filename[:filename.rfind(".")] + ".parquet" else: dest= 's3://' + dest_bucket + '/' + dest_prefix + '/' + filename[:filename.rfind(".")] + ".parquet" # Perform conversion df = pd.read_csv(src) df.to_parquet(dest)

convert('bucket-in', 'prefix-in/test12345.csv', 'bucket-out', 'prefix-out')

使用这个convert()函数,只需使用boto3进行ListObjects,然后为每个对象调用convert()函数即可。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则