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
>
>
signature.asc
Description: This is a digitally signed message part
