Пул соединений в приложении потокового pyspark

Как правильно использовать пулы соединений в приложении потокового pyspark?

Я прочиталhttps://forums.databricks.com/questions/3057/how-to-reuse-database-session-object-created-in-fo.html и понять, как правильно использовать singleton для scala / java. Возможно ли это в Python? Небольшой пример кода будет принята с благодарностью. Я считаю, что создание соединения perPartition будет очень неэффективным для потокового приложения.

Ответы на вопрос(1)

пулы соединений будут менее полезны в Python, чем в JVM из-за архитектуры PySpark. В отличие от своего аналога Scala, Python-исполнители используют отдельные процессы. Это означает, что между исполнителями нет общего состояния, и, поскольку по умолчанию каждый раздел обрабатывается последовательно, у каждого интерпретатора может быть только одно активное соединение.

Конечно, все еще полезно поддерживать связи между партиями. Для этого вам понадобятся две вещи:

spark.python.worker.reuse должен быть установлен в true.Способ ссылки на объект между различными вызовами.

Первый довольно очевиден, а второй не совсем специфичен для Spark. Вы можете, например, использовать модуль Singleton (вы найдете пример Spark в моем ответе наКак запустить функцию на всех рабочих Spark перед обработкой данных в PySpark?) илиШаблон Борг.

Ваш ответ на вопрос