Интеграция Apache Ignite и Apache Spark, загрузка кэша в Spark Context с помощью IgniteRDD

Если я создам igniteRDD из кеша с 10 М записями в моем задании Spark, загрузит ли он все 10 МБ в мой контекст Spark? Пожалуйста, найдите мой код ниже для справки.

    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());

В приведенном выше коде subscriberCache имеет более 10 миллионов записей. Будут ли в какой-либо точке приведенного выше кода объекты 10M Subscriber загружаться в JVM? Или он загружает только вывод запроса?

К вашему сведению: (Ignite работает на отдельной JVM)


person Benak Raj    schedule 06.04.2016    source источник


Ответы (1)


cache.sql(...) запрашивает данные, которые уже находятся в кэше Ignite в памяти, поэтому перед этим вы должны загрузить данные. Для этого вы можете использовать метод IgniteRDD.saveValues(...) или IgniteRDD.savePairs(...). Каждый из них будет перебирать все разделы и загружать все данные, которые в настоящее время существуют в Spark, в Ignite.

Обратите внимание, что любые преобразования или соединения, которые вы выполняете с результирующим DataFrame, будут выполняться локально в драйвере. Вам следует избегать этого, насколько это возможно, чтобы получить максимальную производительность от механизма Ignite SQL.

person Valentin Kulichenko    schedule 30.05.2016