AWS Glue-选择动态文件

时间:2018-09-29 01:36:46

标签: python amazon-web-services pyspark aws-glue

有人知道如何从S3存储桶中获取动态文件吗?我在S3存储桶上设置了搜寻器,但是我的问题是,每天都会有YYYY-MM-DD-HH-MM-SS后缀的新文件出现。

当我通过目录读取表时,它会读取目录中存在的所有文件吗?是否可以动态选择给定日期的最新三个文件并将其用作源?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果文件位于同一位置,则无需重新运行搜寻器。例如,如果您的数据文件夹为s3://bucket/data/<files>,则可以向其中添加新文件并运行ETL作业-新文件将自动被拾取。

但是,如果数据到达s3://bucket/data/<year>/<month>/<day>/<files>之类的新分区(子文件夹),那么您需要在Athena中运行搜寻器或执行MSCK REPAIR TABLE <catalog-table-name>来在Glue Catalog中注册新分区,然后再启动Glue ETL工作。

将数据加载到DynamicFrame或spark的DataFrame中时,可以应用一些过滤器以仅使用所需的数据。如果仍要使用文件名,则可以使用input_file_name spark函数将其添加为列,然后应用过滤:

from pyspark.sql.functions import col, input_file_name

df.withColumn("filename", input_file_name)
  .where(col("filename") == "your-filename")

如果您控制文件的发送方式,建议您将其放入分区(指示日期的子文件夹,即/data/<year>/<month>/<day>/或仅/data/<year-month-day>/),以便使用{{ 3}}在AWS Glue中