我正在尝试使用下面的代码(在scala中)从Spark应用程序执行对Ignite缓存(版本2.2)的简单插入:
val addresses=new util.ArrayList[String]()
addresses.add("127.0.0.1:48500..48520")
// IGNITE CONTEXT CONFIGURATIONS
val igniteContext:IgniteContext=new IgniteContext(sc,()=>new IgniteConfiguration()
.setDiscoverySpi(new TcpDiscoverySpi().
setLocalPort(48511).setLocalPortRange(20).setIpFinder(new TcpDiscoveryVmIpFinder().setAddresses(addresses))),true)
// CHECKING IF Spark CACHE IS PRESENT
println(igniteContext.ignite().cacheNames())
// RETURNS [Spark]
// FETCHING THE SPARK CACHE
val ignite_cache_rdd:IgniteRDD[String,Custom_Class] =igniteContext.fromCache[String,Custom_Class]("Spark")
// SAVING PAIR_RDD TO CACHE
ignite_cache_rdd.savePairs(ignite_PairRDD)
// PRINTING CONTENTS FROM CACHE
ignite_cache_rdd.sql("select * from Custom_Class").show(truncate = false)
//RETURNS AN EMPTY DATAFRAME
当转换为Dataframe时,ignite_PairRDD值字段的内容显示没有问题:
+-+-+-+
A |B |C|
--------
22|6 |7|
+-+-+-+
问题是在使用“savePairs”并执行“show()”之后,Ignite缓存似乎是空的。
+-+-+-+
A |B |C|
--------
| | |
+-+-+-+
“Spark”缓存具有以下配置(在java中):
CacheConfiguration cache_conf=new CacheConfiguration<String,Custom_Class>().setCacheMode(CacheMode.PARTITIONED).setAtomicityMode(CacheAtomicityMode.ATOMIC).setBackups(1).
setIndexedTypes(String.class,Custom_Class.class).setName("Spark");
使用以下结构创建“Custom_Class”:
public class Equity_Data implements Serializable {
@QuerySqlField(index = true)
private A;
@QuerySqlField(index = true)
private B;
@QuerySqlField(index = true)
private C;
}
我确保检查缓存是否存在,并且SQL查询似乎是正确的,因为我没有收到任何错误,只是一个空数据帧。
我是否需要更改某些配置? 谢谢。