流式pyspark应用程序中的连接池

时间:2016-07-07 21:55:39

标签: python apache-spark pyspark connection-pooling spark-streaming

在流式pyspark应用程序中使用连接池的正确方法是什么?

我通读了https://forums.databricks.com/questions/3057/how-to-reuse-database-session-object-created-in-fo.html并了解正确的方法是使用单例进行scala / java。这在python中可能吗?我们将非常感谢一个小代码示例。我认为创建连接perPartition对于流应用程序来说效率非常低。

1 个答案:

答案 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