【发布时间】:2017-10-12 11:54:32
【问题描述】:
我正在尝试使用以下代码从 Spark SQL 连接到 Oracle DB:
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)
默认情况下,当我们通过 Spark SQL 与 Oracle 连接时,它会为一个分区创建一个连接,并将为整个 RDD 创建一个分区。这样,当表中有大量数据时,我就会失去并行性和性能问题。在我的代码中,我通过了option("numPartitions", "10")
这将创建 10 个连接。如我所知,如果我错了,请更正,与 Oracle 的连接数将等于我们通过的分区数。
如果我使用更多连接,我会遇到以下错误,因为可能是对 Oracle 的连接限制。
java.sql.SQLException: ORA-02391: 超出同时 SESSIONS_PER_USER 限制
如果我使用更多分区来创建更多分区以实现并行性,则会出现错误,但如果我放的少,我会遇到性能问题。有没有其他方法可以创建单个连接并将数据加载到多个分区中(这将挽救我的生命)。
请提出建议。
【问题讨论】:
标签: oracle apache-spark database-connection apache-spark-sql