我正在尝试使用 AWS CLI 将 parquet 文件递归上传到 AWS S3 存储桶。我想删除 .parquet 并使用文件名作为目标表名称。
因此,在 table1.parquet、table2.parquet 的目录中,我要运行如下所示的内容:
aws s3 cp ./MyDir s3://mybucket/ --recursive
我收到以下错误,这是有道理的,因为预期的表是 table1 而不是 table1.parque:
s3://mybucket/table1.parquet is not found
理想情况下,我可以在 CLI 语句中指定文件名更改为 table1、table2 等的位置:
aws s3 cp ./MyDir s3://mybucket/{filename} --recursive
AWS CLI 没有在上传过程中直接重命名文件的内置功能。但是,您可以通过使用脚本来实现您的目标。这是 Bash 中的一个简单脚本,用于将 Parquet 文件上传到 S3 并通过删除 .parquet 扩展名来重命名它们:
#!/bin/bash
# Directory containing the Parquet files
SOURCE_DIR="./MyDir"
# Target S3 bucket
S3_BUCKET="s3://mybucket/"
# Loop through all .parquet files in the directory
for filepath in "$SOURCE_DIR"/*.parquet; do
# Extract the filename without the path
filename=$(basename "$filepath")
# Remove the .parquet extension
target_name="${filename%.parquet}"
# Upload the file to S3 with the new name
aws s3 cp "$filepath" "$S3_BUCKET$target_name"
if [ $? -eq 0 ]; then
echo "Uploaded $filepath as $target_name"
else
echo "Failed to upload $filepath"
fi
done
这会将 ./MyDir 目录中的所有 .parquet 文件上传到您的 S3 存储桶,并使用文件名(不带 .parquet)作为密钥。