java.lang.IllegalArgumentException: требование не выполнено: ошибка точности переполнения при извлечении данных оракула в Python с PySpark и драйвером JDBC

Я попытался подключиться к базе данных оракула с помощью технологии spark, инструмента PySpark. spark 1.5, scala-2.10.4, Pyhton3.4, ojdbc7.jar Я не устанавливал клиент оракула, только скопировал библиотеку оракула и установил LD_LIBRARY_PATH. Я тестировал, работал правильно и мог получать данные с помощью os (Centos 7), а также R (с пакетом ROracle) и Python3.4 (с cx_Oracle). Я использовал соединение ниже в PySpark:

df=sqlContext.read.format('jdbc').options(url='jdbc:oracle:thin:UserName/Password@IP:1521/SID',dbtable="Table").load()

Он подключается без проблем, но когда я попытался, например, df.head(), я столкнулся с этой ошибкой.

15/12/03 16:41:52 INFO SparkContext: Starting job: showString at NativeMethodAccessorImpl.java:-2
15/12/03 16:41:52 INFO DAGScheduler: Got job 2 (showString at NativeMethodAccessorImpl.java:-2) with 1 output partitions
15/12/03 16:41:52 INFO DAGScheduler: Final stage: ResultStage 2(showString at NativeMethodAccessorImpl.java:-2)
15/12/03 16:41:52 INFO DAGScheduler: Parents of final stage: List()
15/12/03 16:41:52 INFO DAGScheduler: Missing parents: List()
15/12/03 16:41:52 INFO DAGScheduler: Submitting ResultStage 2 (MapPartitionsRDD[5] at showString at NativeMethodAccessorImpl.java:-2), which has no missing parents
15/12/03 16:41:52 INFO MemoryStore: ensureFreeSpace(5872) called with curMem=17325, maxMem=13335873454
15/12/03 16:41:52 INFO MemoryStore: Block broadcast_2 stored as values in memory (estimated size 5.7 KB, free 12.4 GB)
15/12/03 16:41:52 INFO MemoryStore: ensureFreeSpace(2789) called with curMem=23197, maxMem=13335873454
15/12/03 16:41:52 INFO MemoryStore: Block broadcast_2_piece0 stored as bytes in memory (estimated size 2.7 KB, free 12.4 GB)
15/12/03 16:41:52 INFO BlockManagerInfo: Added broadcast_2_piece0 in memory on localhost:41646 (size: 2.7 KB, free: 12.4 GB)
15/12/03 16:41:52 INFO SparkContext: Created broadcast 2 from broadcast at DAGScheduler.scala:861
15/12/03 16:41:52 INFO DAGScheduler: Submitting 1 missing tasks from ResultStage 2 (MapPartitionsRDD[5] at showString at NativeMethodAccessorImpl.java:-2)
15/12/03 16:41:52 INFO TaskSchedulerImpl: Adding task set 2.0 with 1 tasks
15/12/03 16:41:52 INFO TaskSetManager: Starting task 0.0 in stage 2.0 (TID 2, localhost, PROCESS_LOCAL, 1929 bytes)
15/12/03 16:41:52 INFO Executor: Running task 0.0 in stage 2.0 (TID 2)
15/12/03 16:41:52 INFO JDBCRDD: closed connection
15/12/03 16:41:52 ERROR Executor: Exception in task 0.0 in stage 2.0 (TID 2)
java.lang.IllegalArgumentException: requirement failed: Overflowed precision
...

когда я искал, я обнаружил, что это ошибка, которая решена в github и должна быть решена с помощью строки кода ниже

case java.sql.Types.NUMERIC       => DecimalType.bounded(precision + scala, scale)

но, как я проверил, они существуют в моем файле JDBCRDD.scala.
Есть ли способ решить эту проблему?


person Hossein Vatani    schedule 03.12.2015    source источник


Ответы (1)


У меня были переговоры с одним из разработчиков Spark, и он сказал, что это ошибка, и мы должны дождаться новой версии или использовать версию jira spark.

person Hossein Vatani    schedule 05.12.2015