Итак, я предполагаю, что на заднем плане происходит несколько вещей.
Я полагаю, вы определили внешнюю таблицу в Redshift Spectrum, которая указывает на S3? Если так, то это не лучший подход. Вместо этого определите внешнюю схему, которая указывает на таблицу в каталоге данных Glue. В результате RS Spectrum увидит все в этой базе данных Glue, и вам не нужно определять отдельные таблицы.
Во-вторых, вы пытались определить таблицу вручную в каталоге данных Glue? Я провел обширное тестирование с форматом файлов Parquet, возиться с определениями таблиц и содержимым файлов. В результате все запросы из этой таблицы будут возвращать только данные, определенные в таблице. Таким образом, вы можете определить таблицу с полями 'id', 'name' и 'selected items', а все остальное будет игнорироваться.
Если по какой-либо причине предыдущая версия не работает, то поможет клейкая работа. Как примечание - всегда используйте только искру, никогда не используйте ничего связанного с glue_context. В любом случае, в spark.read.blaah вы можете указать параметр схемы. Используйте это.
dataSchema = StructType([StructField("id",StringType(),True)
,StructField("name",StringType(),True)
,StructField("selected items",ArrayType(.. etc ...),True)
])
Таким образом, вы получите тот же результат - он будет анализировать только те данные, которые вам нужны.
Настройка в конце, вероятно, должна выглядеть примерно так:
- S3 содержит JSON-файлы
- Задание склеивания считывает данные из входной группы и записывает их в другую область, возможно, разбитую на части и / или в другой формат данных
- Таблица склеивания определяется поверх второго ведра / префикса
- Redshift Spectrum указывает на базу данных, которая содержит таблицу, определенную на предыдущем шаге