使用DataFrames从Informix迁移到Spark的JDBC

3
我可以使用简单的JDBC连接程序连接Informix数据库,但是当我尝试使用Spark Dataframes加载表时,遇到了异常。我们需要使用特定的连接器来连接Informix和Spark吗?
以下是异常的堆栈跟踪:
java.sql.SQLException: System or internal error java.lang.NumberFormatException: For input string: "table_name"
at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:482)
at com.informix.jdbc.IfxChar.toLong(IfxChar.java:666)
at com.informix.jdbc.IfxResultSet.getLong(IfxResultSet.java:1123)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$$anon$1.getNext(JDBCRDD.scala:411)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$$anon$1.hasNext(JDBCRDD.scala:472)
at org.apache.spark.sql.execution.datasources.DefaultWriterContainer.writeRows(WriterContainer.scala:241)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelation$$anonfun$run$1$$anonfun$apply$mcV$sp$3.apply(InsertIntoHadoopFsRelation.scala:150)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelation$$anonfun$run$1$$anonfun$apply$mcV$sp$3.apply(InsertIntoHadoopFsRelation.scala:150)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:88)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

请提供您的Spark提交命令和异常堆栈。 - Shawn Guo
@ShawnGuo:已添加异常堆栈跟踪,但未添加Spark提交命令。 - Jonathan Leffler
很遗憾,对你来说,我理解的日食是指黑暗时期,并且这表明了我对Eclipse的了解程度有多少; 我能拼写Java - c,o,f,f,e,e; 而火花则是一种小的白热闪光:这些都无法帮助我将其组装成一个访问Informix数据库的连贯机制。Je ne sais quoi等等。 对不起,我无法提供太多帮助。 - Jonathan Leffler
我正在通过Eclipse中的独立Java程序访问Spark中的Informix数据 @ShawnGuo - indicoder
从堆栈跟踪来看,似乎存在与Informix数据库的连接。问题可能出在从Informix读取数据上。Spark调用getNext(),它又调用getLong(),而getLong()接收到的是无法解析为数字的“table_name”。 - Michał Niklas
2个回答

5
当Spark生成数据库查询时,它会用引号将列名括起来。为了适应这种情况,在JDBC连接URL中你需要添加DELIMIDENT=Y

我知道回复晚了,但这对我有用。谢谢。 - dasrohith

1

从堆栈跟踪中看,似乎存在与Informix数据库的连接。

问题可能在于从Informix读取数据。Spark调用getNext(),该方法调用getLong()getLong()接收到无法解析为数字的'table_name'。

我不了解Spark。也许可以添加一些关于如何使用Spark的详细信息(可能是代码)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接