有人知道如何从S3存储桶中获取动态文件吗?我在S3存储桶上设置了一个爬虫,然而,我的问题是,每天都会有后缀为YYYY-MM-DD-HH-MM-SS的新文件到来。
当我通过目录读取表时,它会读取目录中存在的所有文件吗?是否可以动态挑选给定日期的最新三个文件,并将其用作源文件?
谢谢!
发布于 2018-10-01 07:58:38
如果文件位于同一位置,则不需要重新运行crawler。例如,如果您的数据文件夹是s3://bucket/data/<files>,那么您可以向其中添加新文件并运行ETL作业-新文件将被自动拾取。
但是,如果数据到达像s3://bucket/data/<year>/<month>/<day>/<files>这样的新分区(子文件夹),那么在启动Glue ETL作业之前,您需要在雅典娜中运行爬虫程序或执行MSCK REPAIR TABLE <catalog-table-name>以在Glue Catalog中注册新分区。
当数据加载到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>/),以便您可以从在AWS Glue中使用pushdown predicates中获益
https://stackoverflow.com/questions/52564332
复制相似问题