Я пытаюсь получить имя входного файла (или путь) для каждого файла, загруженного через каталог данных S3 в AWS Glue.
Я прочитал в нескольких местах, которые input_file_name()
должны предоставить эту информацию (хотя и подтвердили, что это работает только при вызове from_catalog
, а не from_options
, что, я полагаю,am!).
Таким образом, приведенный ниже код выглядит так, как будто он должен работать, но всегда возвращает пустые значения для каждого input_file_name
.
import sys
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from pyspark.sql.functions import input_file_name
args = getResolvedOptions(sys.argv, ['JOB_NAME', 'TempDir'])
sc = SparkContext()
gc = GlueContext(sc)
spark = gc.spark_session
job = Job(gc)
job.init(args['JOB_NAME'], args)
# Get the source frame from the Glue Catalog, which describes files in S3
fm_source = gc.create_dynamic_frame.from_catalog(
database='database_name',
table_name='table_name',
transformation_ctx='fm_source',
)
df_source = fm_source.toDF().withColumn('input_file_name', input_file_name())
df_source.show(5)
Результирующий вывод:
+-------------+---------------+
|other_columns|input_file_name|
+-------------+---------------+
| 13| |
| 33| |
| 53| |
| 73| |
| 93| |
+-------------+---------------+
Есть ли другой способ создания фрейма, обеспечивающий заполнение input_file_name()
?Я сейчас попытался построить исходный фрейм через create_dynamic_frame.from_catalog
, create_dynamic_frame.from_options
и getSource().getFrame()
, но я получаю одинаковый результат пустого столбца input_file_name
для каждого.