Postgresql Scala Spark跨所有节点共享连接

Postgresql Scala Spark跨所有节点共享连接,postgresql,scala,apache-spark,Postgresql,Scala,Apache Spark,我想写一些从spark DF到postgres的数据。在堆栈上搜索之后,我找到了最简单的方法——每次使用我准备好的语句时打开连接——这很好。但我想在所有节点之间共享连接变量。 我从这里得到了一些代码:并编写了以下代码: class SharedVariable[T](constructor: => T) extends AnyRef with Serializable { @transient private lazy val instance: T = constructor

我想写一些从spark DF到postgres的数据。在堆栈上搜索之后,我找到了最简单的方法——每次使用我准备好的语句时打开连接——这很好。但我想在所有节点之间共享连接变量。 我从这里得到了一些代码:并编写了以下代码:

class SharedVariable[T](constructor: => T) extends AnyRef with Serializable {
   @transient private lazy val instance: T = constructor
   def get = instance 
}

object SharedVariable {
    def apply[T](constructor: => T): SharedVariable[T] = new SharedVariable[T](constructor)}

val dsv = SharedVariable {
   val ds = new BasicDataSource()
   ds.setDriverClassName("org.postgresql.Driver")
   ds.setUrl("jdbc:postgresql://...")
   ds.setUsername("user")
   ds.setPassword("pass")
ds}
但我有一个错误:

error: reference to SharedVariable is ambiguous;
it is imported twice in the same scope by
import $line1031857785174$read.SharedVariable
and import INSTANCE.SharedVariable val dsv = SharedVariable {

有人能帮我吗?

你的代码编译成功-也许你遗漏了一些?我认为这是不可能的。Postgre连接使用简单的tcp/ip。您不能由具有不同ip地址的节点共享tcp连接。您可以使用rdd.mapPartitions,它允许与分区内的记录共享对象