1

私はほとんどのサイトに存在するこの例を使用しました。

int letterCnt = G.grid().reduce(
GridClosureCallMode.SPREAD,
F.yield("Counting Letters In This Phrase".split(" "),
    new C1<String, Integer>() {
        @Override public Integer apply(String word) {
            return word.length();
        }
    }
),
F.sumIntReducer()
);

最初の引数は、作業負荷の均等な分散を示します(ラウンドロビンベースに似ていると思います)2番目の引数には、検出されたすべてのノードで実行されるコードがあります3番目の引数は、異なるノードで実行されたapply()からすべての結果データを受け取りますそれに応じて処理します。

3番目の引数F.sumIntReducer()を独自の関数に置き換えることができるかどうかを知りたいです。はいの場合、例を見てみたいと思います。F.sumIntReducer()と同じ機能を持つ同じ関数を作成するとします(つまり、異なるノードで検出されたすべての長さを合計します)。

4

2 に答える 2

0

はい、独自のカスタムレデューサーを定義できます。例はここにあります。

于 2013-01-26T07:15:47.500 に答える
0

reduceメソッドには、グローバルな入力データ型と出力データ型があります。その概略構造は次のとおりです。

1   resultValue = grid.reduce(
2   job distribution mode,
3   executable logic function,
4   split function,
5   collect function);
  1. タスクの結果値は、reduce関数の戻り値に直接割り当てられます。グリッドは、ジョブが送信される対応するグリッドです。ここでは、複数のグリッドを定義して並列に存在させることができます。
  2. ジョブ分散設定はここで定義されます。ジョブ分散のパラメーターには、次の3つのオプションがあります。-GridClosureCallMode.BALANCE–バランスの取れた(ラウンドロビン?)ジョブの分散-GridClosureCallMode.BROADCAST –すべてのノードがすべてのジョブを処理します-GridClosureCallMode.SPREAD –すべてのジョブがランダムに分散されます
  3. アトミック論理関数はここで定義されます。この部分はジョブと呼ばれます。ノードに送信され、処理され、グローバル結果の一部が含まれます。サポートされている入力および出力データ型が定義されています。GridGainは、この関数に必要なすべてのライブラリの配布もサポートしています。つまり、必要なすべてのライブラリがジョブに付属しているため、マスターノードはすべてのノードがローカルで使用できるライブラリの使用に限定されません。もちろん、これによりデータトラフィックが増加します。
  4. 入力データはノードに分散する必要があります。各関数には、split関数からのデータセットの1つが提供されます。データの内訳は、対応するデータ型の配列リストに格納されます。実装結果により、低レベルのデータ型のみがサポートされます(GridGainによると、高レベルのデータも転送可能である必要があります)。PDFや画像などのより複雑なデータを転送するには、バイト配列へのカプセル化を行う必要があります。
  5. マスターノードはこの関数を使用して、結果のパーツを受け取り、それらを最終結果に再アセンブルします。

簡単な例:(メモリ操作のみでCPUを集中的に使用しないため、グリッドをあまり利用しないため、単一実行の改善を期待しないでください)

private static int countLettersReducer(String phrase) throws GridException {

        // final GridLogger log = grid.log();
        int letterCount = 0;

        // Execute Hello World task.
        try {

            @SuppressWarnings("unchecked")
            int letterCnt =

            grid.reduce(GridClosureCallMode.BALANCE,
            // input: string
            // output: integer
                    new GridClosure<String, Integer>() {

                        private static final long serialVersionUID = 1L;

                        // Create executable logic block for a job part
                        @Override
                        public Integer apply(String word) {
                            // Print out a given word, just so we can
                            // see which node is doing what.
                            // System.out.println(">>> Calculating for word: " + word);
                            // Return the length of a given word, i.e. number of
                            // letters.
                            return word.length();
                        }
                    },

                    // split tasks for single jobs according to this function
                    // split at linebreaks
                    Arrays.asList(phrase.split("\n")),

                    // Collection of words.
                    // Collect the results from each job of the nodes
                    //input and output is integer
                    new GridReducer<Integer, Integer>() {
                        /**
                         * 
                         */
                        private static final long serialVersionUID = 1L;
                        private int sum;

                        @Override
                        public boolean collect(Integer res) {
                            sum += res;

                            return true; // True means continue collecting until
                                            // last result.
                        }

                        // return the collected results
                        @Override
                        public Integer apply() {
                            return sum;
                        }
                    });

            letterCount = letterCnt;
        } catch (Exception e) {

        }
        return letterCount;
    }
于 2013-03-18T13:50:56.840 に答える