在运行 AWS Glue ETL 作业并命名输出文件名时,有没有办法从 S3 存储桶中读取文件名。 pyspark 是不是提供了一种方法来做到这一点?

Posted

技术标签:

【中文标题】在运行 AWS Glue ETL 作业并命名输出文件名时,有没有办法从 S3 存储桶中读取文件名。 pyspark 是不是提供了一种方法来做到这一点?【英文标题】:Is there a way to read filename from S3 bucket when running AWS Glue ETL job and name the output filename. Does pyspark provide a way to do it?在运行 AWS Glue ETL 作业并命名输出文件名时,有没有办法从 S3 存储桶中读取文件名。 pyspark 是否提供了一种方法来做到这一点? 【发布时间】:2020-06-08 23:33:54 【问题描述】:

我正在通过从名为 rawpart1.json 和 rawpart2.json 的多个 S3 存储桶读取 json 文件来运行 AWS Glue ETL 作业。 验证两个文件中的字段以及两个 S3 存储桶中的文件名。我可以读取和更改文件名吗? ETL 作业运行后,为 S3 存储桶中 ETL 作业的输出创建文件名。目前我将 run-15902070851728-part-r-00000 作为文件名。让我知道我们是否可以在 pyspark 中做到这一点?谢谢

【问题讨论】:

【参考方案1】:

您无法控制 spark 生成的输出文件名。 但是,如果您想要文件名来读取特定文件,您可以利用 boto3 从 s3 存储桶中获取文件名,然后将其传递给您的 etl 作业以读取该特定文件。

无法控制输出文件名,因为多个执行器负责生成输出文件。我们可以控制我们想要输出数据的文件夹名称,但不能控制文件名。

【讨论】:

【参考方案2】:

您可以在写出框架之前使用 DynamicFrame repartition 方法减少输出分区/文件的数量。虽然 Spark 不能像上面提到的那样命名你的输出文件,但它仍然可以在写入 S3 后重命名。

请参考this answer,它使用从 S3 路径创建的 Hadoop FileSystem 对象来允许您修改输出文件名。您需要使用 Boto3 捕获输入文件名以替换该答案中的 desired_name

【讨论】:

以上是关于在运行 AWS Glue ETL 作业并命名输出文件名时,有没有办法从 S3 存储桶中读取文件名。 pyspark 是不是提供了一种方法来做到这一点?的主要内容,如果未能解决你的问题,请参考以下文章

从 AWS Redshift 到 S3 的 AWS Glue ETL 作业失败

AWS Glue ETL作业缺少对爬网程序可见的字段

AWS Glue输出文件名

AWS Glue 输出文件名

AWS Glue 抓取动态 S3 路径位置

AWS Glue ETL 作业的 Scala 和 Java 版本是啥?