2

Spark ジョブで 1,000 万エントリのキャッシュを作成するigniteRDDと、1,000 万エントリすべてが 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は、1,000 万を超えるエントリがあります。上記のコードの任意の時点で、10M の Subscriber オブジェクトが JVM にロードされますか? それとも、クエリ出力のみをロードしますか?

参考までに:(Ignite は別の JVM で実行されています)

4

1 に答える 1

0

cache.sql(...)メソッドは、既に Ignite のインメモリ キャッシュにあるデータをクエリするため、これを行う前にデータをロードする必要があります。IgniteRDD.saveValues(...)これにはorIgniteRDD.savePairs(...)メソッドを使用できます。それぞれがすべてのパーティションを繰り返し処理し、現在 Spark に存在するすべてのデータを Ignite にロードします。

結果に対して行っている変換または結合はDataFrame、ドライバー上でローカルに行われることに注意してください。Ignite SQL エンジンから最高のパフォーマンスを得るには、これをできるだけ避ける必要があります。

于 2016-05-30T14:26:13.690 に答える