AWS Glue Job Flow - PullRequest
       28

AWS Glue Job Flow

0 голосов
/ 10 июля 2019

У меня есть задание ETL в Glue, которое обрабатывает очень большую (300-метровую строку) таблицу базы данных JDBC, но мне действительно нужно только подмножество (определенные идентификаторы) из этой таблицы.Когда я делаю glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons") Это загружает всю таблицу по этой команде?Есть ли способ написать собственный запрос для загрузки только тех данных, которые мне нужны?Или, если я последую за этим с помощью другой команды, скажем Filter, или команда SQL SQL на кадре DataFrame будет фильтровать данные при извлечении данных?

1 Ответ

1 голос
/ 10 июля 2019

Хорошо, когда вы запускаете:

glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons")

Создает только ссылку Spark DF.

Spark работает с преобразованиями (т. Е. Фильтровать, отображать, выбирать) и действиями (т. Е. Собирать, считать, показывать). Вы можете прочитать больше об этом здесь Как работает Преобразование и действие Apache Spark , но в основном ваша таблица базы данных будет загружаться в память только при вызове action. Это одна из многих причин, по которым Spark настолько мощен и рекомендуется работать с набором данных любого размера.

Этот PDF показывает все доступные преобразования и действия и некоторые примеры их использования.

Так что да, вам нужно сделать несколько шагов перед тем, как:

df = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons")
df = df.filter(YOUR_FILTER).select(SPECIFIC_COLS)

# Calling an action to show the filtered DF
df.show()

Это гарантирует, что вы загружаете только определенные столбцы и строки в память

...