Создание соединения Informix с использованием приведенного ниже URL-адреса прекрасно работает с автономной программой Java, но создает проблему при запросе данных с помощью Apache Spark.
String INFORMIX_DRIVER = "com.informix.jdbc.IfxDriver";
SparkConf sparkConf = new SparkConf()
.setAppName("BuyerConnet-Pre-Final-SQ-Item-Export")
.set("spark.cores.max", "64")
.set("spark.executor.instances", "32")
.set("spark.default.parallelism", "256")
.set("spark.executor.memory", "1g")
.set("hive.exec.dynamic.partition", "true")
.set("hive.exec.dynamic.partition.mode", "nonstrict");
SparkSession sparkSession = SparkSession.builder().config(sparkConf).enableHiveSupport().getOrCreate();
String url = "jdbc:informix-sqli:DATABASE=imdct6;INFORMIXSERVER=importsp_redir;SQLH_TYPE=FILE;SQLH_FILE=/tmp/sqlhosts;DELIMIDENT=Y";
Dataset<Row> dataSet =
sparkSession.read().format("jdbc")
.option("url", url)
.option("dbtable", "( select * from table where table_status_code = 1000 ) AS TEST_DATA")
.option("user", "sample")
.option("password", "sample")
.option("driver", INFORMIX_DRIVER).load();
dataSet.printSchema();
Файл sqlhosts находится в нужном месте.В нем есть правильные записи, которые были протестированы.
След ошибки стека, наблюдаемый ниже.
Caused by: java.sql.SQLException: com.informix.asf.IfxASFException: Invalid ASF API input parameters.
at com.informix.jdbc.IfxSqliConnect.<init>(IfxSqliConnect.java:1691)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.informix.jdbc.IfxDriver.connect(IfxDriver.java:206)
at org.apache.spark.sql.execution.datasources.jdbc.DriverWrapper.connect(DriverWrapper.scala:45)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:61)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:52)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD.compute(JDBCRDD.scala:286)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:96)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:53)
at org.apache.spark.scheduler.Task.run(Task.scala:108)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:335)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Любые предложения о том, в чем может быть проблема или как ее можно исправить?