我想从spark DF写一些数据到postgres。在堆栈上搜索后,我找到了最简单的方法 - 每次使用我准备好的语句时打开连接 - 这样可以正常工作。但我希望通过所有节点共享变量。 我从这里得到了一些代码:https://www.nicolaferraro.me/2016/02/22/using-non-serializable-objects-in-apache-spark/并写了这个:
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 {
有人可以帮助我吗?