Я выполняю операцию соединения из данных паркета S3 в таблицу JDBC (Postgres), используя столбец в данных паркета для первичного ключа таблицы JDBC.Мне нужна небольшая часть (но все же большое количество - десятки или сотни тысяч строк в целом) из таблицы JDBC, а затем мне нужно интеллектуально разделить данные для использования в исполнителях.
I 'Я все еще новичок в области разработки данных в целом и Spark в частности, так что простите (и предположите!) мое невежество.Меня меньше волнует время обработки, чем использование памяти;Я должен приспособить использование памяти к пределам Amazon Glue.
Какой хороший способ сделать это?
Мои существующие мысли:
Я мог бы, теоретически,построить запрос SQL как:
select * from t1 where id = key1 UNION
select * from t1 where id = key2 UNION...
Но это кажется глупым.Этот вопрос: Выбор нескольких строк по идентификатору, есть ли более быстрый способ, чем WHERE IN , дает мне идею записать ключи, которые я хочу получить, во временную таблицу, соединить их с исходной таблицей и вытянутьрезультат;который выглядит как «правильный» способ сделать выше.Но это также может показаться достаточно распространенной проблемой, поскольку есть готовое решение, которое я еще не нашел.
Существует также возможность переключения между минимальными и максимальными значениями UUID, но затемвопрос заключается в том, сколько дополнительных строк я извлекаю, и поскольку UUID, AFAIK, случайным образом распределены по возможным значениям UUID, я ожидаю, что получится много дополнительных строк (строк, которые будут опущены при объединении).Тем не менее, это может быть полезным способом разделения данных JDBC.
Мне также до сих пор неясно, как данные JDBC попадают к исполнителям;что он, возможно, проходит (полностью) через процесс драйвера.
Итак, чтобы попытаться формализовать это на вопросы:
- Существует ли существующий рецепт для такого использования?
- Какие функции Spark я должен рассмотреть для достижения этой цели?
- Каков фактический поток данных Spark для данных, поступающих из соединения JDBC?