Почему input_file_name () пуст для источников каталога S3 в pyspark? - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь получить имя входного файла (или путь) для каждого файла, загруженного через каталог данных 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 для каждого.

...