javax.cache.CacheException:索引已禁用缓存:测试。在 CacheConfiguration 上使用 setIndexedTypes 或 setTypeMetadata 方法来启用

javax.cache.CacheException: Indexing is disabled for cache: test. Use setIndexedTypes or setTypeMetadata methods on CacheConfiguration to enable

有人问了类似的问题here。但是,在这个问题中,如果需要,我尝试包含更多详细信息和可执行代码。同样在这里,我通过 Zeppelin 执行此代码。

这是来自 Zeppelin 笔记本的代码片段:

Notebook-1 - 存储一些数据以启动缓存。

val ic = new IgniteContext(sc, () => new IgniteConfiguration())

val cacheConfig = new CacheConfiguration[Int, Int]()
    cacheConfig.setName("test")
    cacheConfig.setIndexedTypes(classOf[Int], classOf[Int])

val cacheRdd = ic.fromCache[Int,Int](cacheConfig)

cacheRdd.savePairs(sc.parallelize(1 to 10000, 10).map(i => (i, i)))

第 2 部分:从我们存储 notebook-1 数据的缓存中读取。

val ic = new IgniteContext(sc, () => new IgniteConfiguration())
val cacheConfig = new CacheConfiguration[Int, Int]()
  cacheConfig.setName("partitioned")
  cacheConfig.setIndexedTypes(classOf[Int], classOf[Int])

val ic = new IgniteContext(sc, () => new IgniteConfiguration())

val cacheRdd = ic.fromCache(cacheConfig)
cacheRdd.sql("select _val from Integer")

第一个笔记本中的代码执行良好。然而,在执行第二个笔记本时,它失败了 header 中提到的异常。

完全异常:

javax.cache.CacheException: Indexing is disabled for cache: test. Use setIndexedTypes or setTypeMetadata methods on CacheConfiguration to enable.
  at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.validate(IgniteCacheProxy.java:831)
  at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:690)
  at org.apache.ignite.spark.IgniteRDD.sql(IgniteRDD.scala:147)
  ... 64 elided

也许您应该尝试使用上面的代码创建新的缓存。我认为它指的是最初创建缓存时使用的一些旧缓存配置。或者销毁缓存并尝试使用相同的名称和上述配置重新创建它。