【发布时间】:2017-08-28 11:22:48
【问题描述】:
我正在执行以下示例 Apache Spark - Ignite 程序
它正在 Ignite Cluster 中创建缓存。我也可以从 Visor 终端查看数据。
但是在运行 SQL 查询时它会失败并出现以下错误。
>>> Transforming values stored in Ignite Shared RDD...
(3,1.7320508075688772)
(1027,32.046840717924134)
(2051,45.28796749689701)
(3075,55.452682532047085)
(4099,64.02343321003646)
>>> Executing SQL query over Ignite Shared RDD...
Exception in thread "main" javax.cache.CacheException: class org.apache.ignite.internal.processors.query.IgniteSQLException: Failed to parse query: select _val from Integer where _val < 100 and _val > 9
at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:807)
at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:765)
at org.apache.ignite.spark.IgniteRDD.sql(IgniteRDD.scala:147)
at ScalarSharedRDDExample$.delayedEndpoint$ScalarSharedRDDExample$1(ScalarSharedRDDExample.scala:65)
at ScalarSharedRDDExample$delayedInit$body.apply(ScalarSharedRDDExample.scala:18)
at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
at scala.App$class.main(App.scala:76)
at ScalarSharedRDDExample$.main(ScalarSharedRDDExample.scala:18)
at ScalarSharedRDDExample.main(ScalarSharedRDDExample.scala)
Caused by: class org.apache.ignite.internal.processors.query.IgniteSQLException: Failed to parse query: select _val from Integer where _val < 100 and _val > 9
at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.queryDistributedSqlFields(IgniteH2Indexing.java:1293)
at org.apache.ignite.internal.processors.query.GridQueryProcessor$5.applyx(GridQueryProcessor.java:1815)
at org.apache.ignite.internal.processors.query.GridQueryProcessor$5.applyx(GridQueryProcessor.java:1813)
at org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36)
at org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:2293)
at org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:1820)
at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:795)
... 13 more
Caused by: org.h2.jdbc.JdbcSQLException: Table "INTEGER" not found; SQL statement:
select _val from Integer where _val < 100 and _val > 9 [42102-195]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.command.Parser.readTableOrView(Parser.java:5506)
at org.h2.command.Parser.readTableFilter(Parser.java:1260)
at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1940)
at org.h2.command.Parser.parseSelectSimple(Parser.java:2089)
at org.h2.command.Parser.parseSelectSub(Parser.java:1934)
at org.h2.command.Parser.parseSelectUnion(Parser.java:1749)
at org.h2.command.Parser.parseSelect(Parser.java:1737)
at org.h2.command.Parser.parsePrepared(Parser.java:448)
at org.h2.command.Parser.parse(Parser.java:320)
at org.h2.command.Parser.parse(Parser.java:292)
at org.h2.command.Parser.prepareCommand(Parser.java:257)
at org.h2.engine.Session.prepareLocal(Session.java:573)
at org.h2.engine.Session.prepareCommand(Session.java:514)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1204)
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:73)
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288)
at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatement(IgniteH2Indexing.java:398)
at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.queryDistributedSqlFields(IgniteH2Indexing.java:1273)
... 19 more
请问如何解决这个错误?
更新 1:
以下配置未能解决错误。
// cache config
val cacheCfg = new CacheConfiguration[Int, Int]()
cacheCfg.setName("sharedRDD")
cacheCfg.setIndexedTypes(classOf[Integer], classOf[Integer])
val transformedValues = igniteContext.fromCache(cacheCfg)
更新 2:
等效的 Java 版本运行良好,但不是 Scala 程序。
【问题讨论】:
-
我检查了 scala 示例,一切正常。你确定你没有改变任何东西?看起来您更改了配置文件或配置文件名。确保在 Scala 示例中使用“examples/config/spark/example-shared-rdd.xml”配置。
标签: scala apache-spark ignite