如果我在我的spark作业中使用10M条目从缓存中创建 SparkConf conf = new SparkConf().setAppName("IgniteSparkIntgr").setMaster("local");
JavaSparkContext context = new JavaSparkContext(conf);
JavaIgniteContext<Integer, Subscriber> igniteCxt = new JavaIgniteContext<Integer,Subscriber>(context,"example-ignite.xml");
JavaIgniteRDD<Integer,Subscriber> cache = igniteCxt.fromCache("subscriberCache");
DataFrame query_res = cache.sql("select id, lastName, company from Subscriber where id between ? and ?", 12, 15);
DataFrame input = loadInput(context);
DataFrame joined_df = input.join(query_res,input.col("id").equalTo(query_res.col("ID")));
System.out.println(joined_df.count());
,它会将所有10M加载到我的spark上下文中吗?请在下面找到我的代码以供参考。
subscriberCache
在上面的代码中, @{@"someKey":[NSString stringWithFormat:@"%@@%@%@/AB", someTextField.text, [aDictionary objectForKey:@"someOtherKey"],@"\\"]};
的条目数超过10M。将以上代码的任何一点将10M Subscriber对象加载到JVM中吗?或者它只加载查询输出?
仅供参考:( Ignite正在一个单独的JVM中运行)
答案 0 :(得分:0)
cache.sql(...)
方法查询已存在于Ignite内存缓存中的数据,因此在执行此操作之前,您应该加载数据。您可以使用IgniteRDD.saveValues(...)
或IgniteRDD.savePairs(...)
方法。它们中的每一个都将遍历所有分区,并将Spark中当前存在的所有数据加载到Ignite中。
请注意,您对结果DataFrame
所做的任何转换或连接都将在驱动程序上进行本地完成。您应尽可能避免使用Ignite SQL引擎获得最佳性能。