在流式pyspark应用程序中使用连接池的正确方法是什么?
我通读了https://forums.databricks.com/questions/3057/how-to-reuse-database-session-object-created-in-fo.html并了解正确的方法是使用单例进行scala / java。这在python中可能吗?我们将非常感谢一个小代码示例。我认为创建连接perPartition对于流应用程序来说效率非常低。
答案 0 :(得分:2)
由于PySpark架构,长篇短连接池在Python中的用处不如JVM。与Scala不同,Python执行程序使用单独的进程。这意味着执行程序之间没有共享状态,因为默认情况下每个分区按顺序处理,每个解释器只能有一个活动连接。
当然,维护批次之间的连接仍然很有用。要实现这一目标,您需要做两件事:
spark.python.worker.reuse
必须设置为true。第一个非常明显,第二个不是特定于Spark的。例如,你可以使用模块单例(你会在How to run a function on all Spark workers before processing data in PySpark?的答案中找到Spark示例)或Borg pattern。