【问题标题】:Connection pooling in a streaming pyspark application流式 pyspark 应用程序中的连接池
【发布时间】:2016-07-07 21:55:39
【问题描述】:

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

我通读了https://forums.databricks.com/questions/3057/how-to-reuse-database-session-object-created-in-fo.html 并了解正确的方法是对 scala/java 使用单例。这在 python 中可能吗?一个小的代码示例将不胜感激。我相信为流式应用程序创建每个分区的连接将非常低效。

【问题讨论】:

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


    【解决方案1】:

    由于 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 2013-05-23
      • 1970-01-01
      相关资源
      最近更新 更多