Hello, Luca.

Please, try to use *withKeepBinary()* method to use BinaryMarshaller while 
query SQL rows from cache.
Please, write me if it doesn't help.

  @Test
   public void testIgniteCaches() {
     Ignite ignite = 
Ignition.start("/Users/luca/java/apache-ignite-fabric-2.4.0-bin/config/default-config.xml");
 
     IgniteCache<String, Object> cache = 
ignite.getOrCreateCache("SQL_PUBLIC_PERSON").withKeepBinary();
     
     // OK
     
System.out.println(cache.containsKey("C2A9BCD3-FE93-4E44-98D9-043086A154A3"));
 
     // throws exception
     System.out.println(cache.get("C2A9BCD3-FE93-4E44-98D9-043086A154A3"));
   }
 


В Пт, 23/03/2018 в 18:13 +0100, Rosellini, Luca пишет:
> Hi Nikolay,
> let's say I have the following ignite config (it's the default config with 
> persistent store enabled):
> 
> $ cat 
> /Users/luca/java/apache-ignite-fabric-2.4.0-bin/config/default-config.xml
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans";
>        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>        xsi:schemaLocation="
>        http://www.springframework.org/schema/beans
>        http://www.springframework.org/schema/beans/spring-beans.xsd";>;
> 
>     <bean id="grid.cfg" 
> class="org.apache.ignite.configuration.IgniteConfiguration">
>         <property name="dataStorageConfiguration">
>         <bean 
> class="org.apache.ignite.configuration.DataStorageConfiguration">
>             <property name="defaultDataRegionConfiguration">
>                 <bean 
> class="org.apache.ignite.configuration.DataRegionConfiguration">
>                     <property name="persistenceEnabled" value="true">
>                 </property></bean>
>             </property>
>         </bean>
>         </property>
>     </bean>
> </beans>
> 
> I have the following json data file :
> {"uuid": "56734043-912F-44AF-9AB0-929482ECCC60","name": "Leonardo","surname": 
> "Da Vinci"}
> {"uuid": "C2A9BCD3-FE93-4E44-98D9-043086A154A3","name": 
> "Raffaello","surname": "Sanzio"}
> Using the following Spark code I load it as a DataFrame:
> final class DataFrameWriteTest extends FunSuite {
>   
>   private lazy val spark = SparkSession.builder()
>     .appName("Example Program")
>     .master("local[1]")
>   .getOrCreate()
>   
>   test("Test write dataframe") {
>     val cfg = 
> "/Users/luca/java/apache-ignite-fabric-2.4.0-bin/config/default-config.xml"
> 
>     val df = 
> spark.read.json("/Users/luca/projects/keedio/spark-sbt-skel/src/test/resources/data.json")
>     
>     df.printSchema()
>     df.write
>       .format(FORMAT_IGNITE)
>       .option(OPTION_CONFIG_FILE, cfg)
>       .option(OPTION_TABLE, "PERSON")
>       .option(OPTION_CREATE_TABLE_PRIMARY_KEY_FIELDS, "uuid")
>       .mode(SaveMode.Append)
>       .save()
>     
>   }
> }
> The dataframe is successfully saved in an Ignite cache called 
> SQL_PUBLIC_PERSON, and I can successfully query it via JDBC, using DBeaver, 
> for example:
> 
> 
> So, now, I'd like to acces the cache using Ignite key/value abstraction, 
> using the following Java code:
> public class JIgniteCacheTest {
>   @Test
>   public void testIgniteCaches() {
>     Ignite ignite = 
> Ignition.start("/Users/luca/java/apache-ignite-fabric-2.4.0-bin/config/default-config.xml");
> 
>     IgniteCache<String, Object> cache = 
> ignite.getOrCreateCache("SQL_PUBLIC_PERSON");
>     
>     // OK
>     
> System.out.println(cache.containsKey("C2A9BCD3-FE93-4E44-98D9-043086A154A3"));
> 
>     // throws exception
>     System.out.println(cache.get("C2A9BCD3-FE93-4E44-98D9-043086A154A3"));
>   }
> As you can see, I am pointing to the same Ignite configuration.
>  The call cache.containsKey(...) returns successfully, while the call to 
> cache.get(...) throws the following exception:
> javax.cache.CacheException: class org.apache.ignite.IgniteCheckedException: 
> SQL_PUBLIC_PERSON_eafe5efa_a96b_4f76_a72b_7b9e4c2d3fcc
> 
>     at 
> org.apache.ignite.internal.processors.cache.GridCacheUtils.convertToCacheException(GridCacheUtils.java:1294)
>     at 
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.cacheException(IgniteCacheProxyImpl.java:1673)
>     at 
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.get(IgniteCacheProxyImpl.java:852)
>     at 
> org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.get(GatewayProtectedCacheProxy.java:676)
>     at 
> com.keedio.ignite.JIgniteCacheTest.testIgniteCaches(JIgniteCacheTest.java:22)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>     at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>     at java.lang.reflect.Method.invoke(Method.java:498)
>     at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
>     at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
>     at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
>     at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
>     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>     at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
>     at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
>     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
>     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>     at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
>     at 
> com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
>     at 
> com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
>     at 
> com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
>     at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
> Caused by: class org.apache.ignite.IgniteCheckedException: 
> SQL_PUBLIC_PERSON_eafe5efa_a96b_4f76_a72b_7b9e4c2d3fcc
>     at org.apache.ignite.internal.util.IgniteUtils.cast(IgniteUtils.java:7244)
>     at 
> org.apache.ignite.internal.util.future.GridFutureAdapter.resolve(GridFutureAdapter.java:259)
>     at 
> org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:190)
>     at 
> org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:140)
>     at 
> org.apache.ignite.internal.processors.cache.GridCacheAdapter.get0(GridCacheAdapter.java:4572)
>     at 
> org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:4546)
>     at 
> org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:1347)
>     at 
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.get(IgniteCacheProxyImpl.java:849)
>     ... 24 more
> Caused by: java.lang.ClassNotFoundException: 
> SQL_PUBLIC_PERSON_eafe5efa_a96b_4f76_a72b_7b9e4c2d3fcc
>     at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>     at java.lang.Class.forName0(Native Method)
>     at java.lang.Class.forName(Class.java:348)
>     at 
> org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8548)
>     at 
> org.apache.ignite.internal.MarshallerContextImpl.getClass(MarshallerContextImpl.java:340)
>     at 
> org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:687)
>     at 
> org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1755)
>     at 
> org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1714)
>     at 
> org.apache.ignite.internal.binary.BinaryObjectImpl.deserializeValue(BinaryObjectImpl.java:797)
>     at 
> org.apache.ignite.internal.binary.BinaryObjectImpl.value(BinaryObjectImpl.java:143)
>     at 
> org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:177)
>     at 
> org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinaryIfNeeded(CacheObjectUtils.java:67)
>     at 
> org.apache.ignite.internal.processors.cache.CacheObjectContext.unwrapBinaryIfNeeded(CacheObjectContext.java:125)
>     at 
> org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1745)
>     at 
> org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1733)
>     at 
> org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.setResult(GridPartitionedSingleGetFuture.java:679)
>     at 
> org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.onResult(GridPartitionedSingleGetFuture.java:536)
>     at 
> org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter.processNearSingleGetResponse(GridDhtCacheAdapter.java:349)
>     at 
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$1400(GridDhtAtomicCache.java:130)
>     at 
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$15.apply(GridDhtAtomicCache.java:422)
>     at 
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$15.apply(GridDhtAtomicCache.java:417)
>     at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1060)
>     at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:579)
>     at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:378)
>     at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:304)
>     at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:99)
>     at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:293)
>     at 
> org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1555)
>     at 
> org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1183)
>     at 
> org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:126)
>     at 
> org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1090)
>     at 
> org.apache.ignite.internal.util.StripedExecutor$Stripe.run(StripedExecutor.java:505)
>     at java.lang.Thread.run(Thread.java:748)
> 
> Hope you can help me shed some light on this.
> 
> Thanks,
> Luca
> 
> 
> 2018-03-23 14:33 GMT+01:00 Nikolay Izhikov <[email protected]>:
> > Hello, Luca.
> > 
> > Can you attach some simple reproducer or code piece that cause exception?
> > 
> > В Пт, 23/03/2018 в 14:31 +0100, Rosellini, Luca пишет:
> > > Hi all,
> > > I am using Apache Ignite 2.4 and I've successfully saved a Spark 
> > > Dataframe as a SQL table in the Ignite caching layer.
> > >
> > > I am trying to access the data from an external Java program (completely 
> > > unrelated to the Spark Job that produced and saved the table) using the 
> > > Cache API, as if it were a key/value store.
> > >
> > > The table, called 'PERSON', has a primary key field called UUID and maps 
> > > to an Ignite cache called SQL_PUBLIC_PERSON.
> > >
> > > Using the Ignite Cache API I am able to check that that a specific entry 
> > > exists in the cache calling:
> > > cache.containsKey(...)
> > >
> > > By the way, If I try to get the value calling cache.get(...) for a 
> > > specific key I get a ClassNotFoundException (full stacktrace is attached).
> > >
> > > Now, I guess Ignite dinamically generated a schema bean for my DataFrame 
> > > when saving the DataFrame itself in Spark.
> > > Since the generated bean class name also seems to be generated whith some 
> > > internal rule (in this example it's 
> > > 'SQL_PUBLIC_PERSON_da18b6a2_8b41_4c34_9451_6fd9ace8e73d') I am not sure 
> > > if this usage pattern does make sense at all.
> > >
> > > I am very new to Apache Ignite so I'd like to apologize if this is a 
> > > silly question, but I am not able to find any clue in the official 
> > > documentation.
> > >
> > > Thanks,
> > > Luca
> 
> 

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to