【问题标题】:Apache Spark - Apache Ignite SQL - Table "INTEGER" not foundApache Spark - Apache Ignite SQL - 未找到表“INTEGER”
【发布时间】:2017-08-28 11:22:48
【问题描述】:

我正在执行以下示例 Apache Spark - Ignite 程序

ScalarSharedRDDExample.scala

它正在 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 程序。

SharedRDDExample.java

【问题讨论】:

  • 我检查了 scala 示例,一切正常。你确定你没有改变任何东西?看起来您更改了配置文件或配置文件名。确保在 Scala 示例中使用“examples/config/spark/example-shared-rdd.xml”配置。

标签: scala apache-spark ignite


【解决方案1】:

从 SQL 访问缓存需要配置索引类型,例如:

        cacheCfg.setIndexedTypes(Integer.class, Integer.class);

看看这个example

【讨论】:

  • 嗯,它适用于 Integer 类型,我只是更改了之前提供的 CacheQueryDmlExample。然后请提供完整的复制者
  • 另外,很可能您将索引类型设置在错误的位置。创建前需要在配置中设置,例如可以放在xml配置文件中
猜你喜欢
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2021-11-21
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
相关资源
最近更新 更多