Apache Ignite和Apache Spark集成,使用IgniteRDD将Cache加载到Spark Context中

时间:2016-04-06 07:07:07

标签: ignite

如果我在我的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中运行)

1 个答案:

答案 0 :(得分:0)

cache.sql(...)方法查询已存在于Ignite内存缓存中的数据,因此在执行此操作之前,您应该加载数据。您可以使用IgniteRDD.saveValues(...)IgniteRDD.savePairs(...)方法。它们中的每一个都将遍历所有分区,并将Spark中当前存在的所有数据加载到Ignite中。

请注意,您对结果DataFrame所做的任何转换或连接都将在驱动程序上进行本地完成。您应尽可能避免使用Ignite SQL引擎获得最佳性能。