2016-04-06 8 views
2

Wenn ich ein igniteRDD aus einem Cache mit 10M Einträge in meinem Spark-Job erstellen, wird es alle 10M in meine Funken Kontext laden? Bitte finden Sie meinen Code als Referenz.Apache Ignite und Apache Spark Integration, Cache Laden in Spark-Kontext mit IgniteRDD

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

In dem obigen Code, subscriberCache ist mehr als 10M Einträge. Werden an irgendeinem Punkt des obigen Codes die 10M Subscriber-Objekte in JVM geladen? Oder es lädt nur die Abfrageausgabe?

FYI:

Antwort

0

cache.sql(...) Methode fragt die Daten, die im Cache-Speicher ist bereits in Ignite (Entzünden wird in einer separaten JVM ausgeführt wird), also, bevor dies zu tun, um die Daten laden sollte. Sie können hierzu die Methode IgniteRDD.saveValues(...) oder IgniteRDD.savePairs(...) verwenden. Jeder von ihnen wird durch alle Partitionen iterieren und alle in Spark vorhandenen Daten in Ignite laden.

Beachten Sie, dass alle Transformationen oder Joins, die Sie mit dem resultierenden DataFrame vornehmen, lokal im Treiber ausgeführt werden. Sie sollten dies so weit wie möglich vermeiden, um die beste Leistung von der Ignite-SQL-Engine zu erhalten.

Verwandte Themen