Cloud Dataflow SDK の作成済み変換

Dataflow SDK では、よく使用される便利なデータ処理オペレーションに対応する、作成済み変換のライブラリが提供されます。変換には、あらかじめ作成された一般的な処理関数からなるコア変換と、単純な作成済み変換を組み合わせて役立つ処理関数を実行する複合変換があります。

Java

Dataflow SDK for Java では、パッケージ com.google.cloud.dataflow.sdk.transforms にこれらの変換が含まれています。

Dataflow SDK の作成済み変換はすべてパイプラインでそのまま使用できます。これらの変換は、共通のデータ処理手順を実行する汎用的で便利なオペレーションです。たとえば、コレクションの要素数のカウント、分位数でのコレクションの分割、コレクション内の上位(または下位)N 件の要素の検索、数値データに対する基本的な算術演算の組み合わせの実行などがあります。

Dataflow SDK の作成済み変換の多くは汎用化された複合変換で、さまざまなデータ型を取ることができます。これらは、ParDoGroupByKeyCombine などのコア変換がネストされて構成されています。

Java

Dataflow SDK for Java は、コア変換を使用する最も一般的なデータ処理オペレーションに対応しています。この SDK で提供される作成済み変換は、本質的には、汎用の ParDo 変換や Combine 変換などの作成済みラッパーです。これらは、要素を数えたり、基本的な算術演算の組み合わせを実行したりするように編成されています。たとえば、Sum.integersGloballyCombine.Globally コア変換を Integer 型向けにラップし、すべての入力要素の合計を計算する作成済みの CombineFn を提供します。独自の Combine.Globally を合計の CombineFn で記述する代わりに、SDK で提供される作成済みのものを使用できます。

Dataflow SDK に含まれる変換がパイプラインの事例に適合しない場合は、汎用の再利用可能な複合変換を独自に作成できます。ParDoCombine、およびその他のコア変換を使用して、独自の複合変換を作成する際には、組み込みの変換のソースコードをモデルとして使用できます。詳しくは、複合変換を作成するをご覧ください。

共通の処理パターン

Dataflow SDK に含まれる変換は、パイプラインで共通のデータ処理オペレーションを実行する便利なメカニズムを提供します。これらの変換のソースコードを見ると、さまざまなオペレーションで ParDo のようなコア変換がどのように使用(または再利用)されるかがわかります。

単純な ParDo ラッパー

Dataflow SDK で提供される最も単純な変換は、キー / 値ペアを処理するユーティリティ変換です。キー / 値ペアの PCollection が指定されると、Keys 変換はキーのみを含む PCollection を返し、Values 変換は値のみを含む PCollection を返します。KvSwap 変換は、各キー / 値ペアのキー要素と値要素を入れ替えて、反転したペアの PCollection を返します。

Java

KeysValuesKvSwapMapElementsFlatMapElementsFilterPartition は、1 つの ParDo で構成される単純な変換です。それぞれで、ParDo は比較的単純な DoFn を呼び出して、出力 PCollection コレクションの要素を生成します。

次に示すのは、Keys 変換の apply メソッドです。これは、KV<K, V> 要素の汎用の PCollection を受け取り、Key-Value ペアのキーのみの PCollection<K> を返します。

  @Override
  public PCollection<K> apply(PCollection<? extends KV<K, ?>> in) {
    return
        in.apply(ParDo.named("Keys")
                 .of(new DoFn<KV<K, ?>, K>() {
                     @Override
                     public void processElement(ProcessContext c) {
                       c.output(c.element().getKey());
                     }
                    }));
  }

この例で、apply メソッドは ParDo 変換を入力コレクション(in)に適用します。この ParDo は単純な DoFn を呼び出して、キー / 値ペアのキー部分を出力します。DoFn は自明であり、匿名内部クラス インスタンスとして定義できます。

要素を組み合わせるパターン

Dataflow SDK には、要素に対して一般的な統計や算術演算の組み合わせを実行する便利な変換がいくつも含まれています。たとえば、数値データ(整数など)の PCollection を受け取って、算術演算の組み合わせを実行する変換があり、コレクション内のすべての要素の合計、すべての要素の平均値、またはすべての要素の最大値 / 最小値を求めることができます。このような変換の例としては、SumMean があります。

コレクションに対して基本的な統計分析を実行する変換もあります。たとえば、上位 N 個の要素を検索したり、指定された PCollection 内の要素 N 個ごとにランダムにサンプルを返したりします。このような変換の例としては、TopSample があります。

Java

これらの変換は Combine コア変換に基づいています。これにはバリアントがあり、個別値の PCollectionCombine.globally を使用)やキー / 値ペアの PCollectionCombine.perKey を使用)に対して作動します。

たとえば、グローバル バリアントとキーごとのバリアント両方の結合変換の例について詳しくは、Top 変換のソースと API for Java リファレンス ドキュメントをご覧ください。

Map/Shuffle/Reduce スタイルの処理

Dataflow SDK に含まれる変換には、Map/Shuffle/Reduce スタイルのアルゴリズムに似た処理を実行するものもあります。これらの変換には Count が含まれます。これは、一意でない可能性がある要素のコレクションを受け取って、一意の要素に絞り込み、要素とその出現回数を組み合わせたコレクションを返します。RemoveDuplicates 変換は、同様に、一意でないコレクションを一意の要素のみに絞り込みますが、出現回数は返しません。

Java

これらの変換は、コアの ParDo 変換と Combine.perKey 変換を利用します。Combine.perKey そのものが、GroupByKey を実行して、各キーの結果の値ストリームを 1 つの値に結合する複合オペレーションです。ParDo は Map/Shuffle/Reduce の Map フェーズで、Combine.perKey は Shuffle フェーズと Reduce フェーズです。

次の Count 変換の apply メソッドでは、ネストされた ParDo 変換と Combine.perKey 変換の処理ロジックを示しています。

  @Override
  public PCollection<KV<T, Long>> apply(PCollection<T> in) {
    return
        in
        .apply(ParDo.named("Init")
               .of(new DoFn<T, KV<T, Long>>() {
                   @Override
                   public void processElement(ProcessContext c) {
                     c.output(KV.of(c.element(), 1L));
                   }
                 }))

        .apply(Combine.<T, Long>perKey(
                 new SerializableFunction<Iterable<Long>, Long>() {
                   @Override
                   public Long apply(Iterable<Long> values) {
                     long sum = 0;
                     for (Long value : values) {
                       sum += value;
                     }
                     return sum;
                   }
                 }));
  }

この例で、apply メソッドは ParDo 変換を使用し、入力 PCollection の各要素に出現回数を付加して、各要素のキー / 値ペアを作成します。これは、Map/Shuffle/Reduce の Map フェーズです。次に、CountCombine.perKey 変換を適用して、Shuffle と Reduce のロジックを実行し、一意の要素と出現回数を組み合わせた PCollection を生成します。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。