我试图从星火SQL与下面的代码连接到Oracle DB:甲骨文引黄星火SQL
val dataTarget=sqlcontext.read.
format("jdbc").
option("driver", config.getString("oracledriver")).
option("url", config.getString("jdbcUrl")).
option("user", config.getString("usernameDH")).
option("password", config.getString("passwordDH")).
option("dbtable", targetQuery).
option("partitionColumn", "ID").
option("lowerBound", "5").
option("upperBound", "499999").
option("numPartitions", "10").
load().persist(StorageLevel.DISK_ONLY)
默认情况下,当我们通过星火SQL与Oracle连接,它会创建一个分区中的一个连接将为整个RDD创建。这种方式会导致松散的并行性,当表中有大量数据时会出现性能问题。在我的代码中,我通过了option("numPartitions", "10")
这将创建10个连接。如果我错了,请更正,如我所知,与Oracle的连接数将等于我们通过的分区数。
如果我使用更多连接,则会出现以下错误,因为可能存在Oracle连接限制。
值java.sql.SQLException:ORA-02391:超过了同时 SESSIONS_PER_USER限制
要,如果我用更多的分区创建并行多个分区,错误出现,但如果我把我少遇到性能问题。是否有任何其他方式来创建单个连接并将数据加载到多个分区(这将挽救我的生命)。
请建议。
正如我以前所说,如果我只使用一个连接,它会影响我的性能,我会松散并行 –
您问:“是否有任何其他方式来创建单个连接并将数据加载到多个分区”。我认为我的方法允许您同时拥有单个Oracle连接和具有多个分区的Dataframe。 – tbone