データ統合パイプラインの最適化とビルドSparkSpark プロファイルの適用

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

Spark プロファイルの適用

ユーザーは、Transforms ジョブにカスタム Spark プロパティを適用したいと思うかもしれません。

特定のジョブに Spark プロパティを適用するには:

  1. リポジトリに Spark プロファイルをインポートするためのガイドに従います。
  2. 以下 Transforms プロファイルの文法で文書化されたように、ユーザーのコード内で Transforms プロファイルを参照します。

デフォルトの Spark プロファイルの特性については、Spark プロファイル参照セクションで詳しく学ぶことができます。

また、Spark プロファイルの調整に関する推奨ベストプラクティスも参照してください。

Transforms プロファイルの文法

カスタム Spark プロファイルの指定は、すべての 言語でサポートされています。以下のすべてのケースでは、設定は左から右に評価されます。複数のプロファイルが同じ設定を指定している場合、リストの最後に近いものが優先されます。

Python

Python コードで profile1profile2 プロファイルを参照するには、Transform オブジェクトをラップする configure デコレータを使用します。このデコレータは、ユーザーのカスタム Transforms プロファイルのリストを参照する profile パラメーターを受け取ります:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 from transforms.api import configure @configure(profile=['profile1', 'profile2']) @transform( # 入力データセット my_input=Input("/path/to/input/dataset"), # 出力データセット my_ouput=Output("/path/to/output/dataset"), ) # データ変換コード def my_compute_function(my_input): return my_input

Java

オート登録された変換は、Java コード内で TransformProfiles アノテーションを使用することで、profile1 および profile2 プロファイルを参照できます。このアノテーションは、カスタム Spark プロファイルの配列を参照するパラメーターを取り込みます:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import com.palantir.transforms.lang.java.api.TransformProfiles; /** * これは自動登録用の低レベルTransformの例です。 */ public final class LowLevel { @Compute // プロファイル "profile1" と "profile2" を適用 @TransformProfiles({ "profile1", "profile2" }) public void myComputeFunction( // 入力データセットへのパス @Input("/path/to/input/dataset") FoundryInput myInput, // 出力データセットへのパス @Output("/path/to/output/dataset") FoundryOutput myOutput) { // 入力データセットから最初の10行を抽出 Dataset<Row> limited = myInput.asDataFrame().read().limit(10); // 出力データセットに書き込む myOutput.getDataFrameWriter(limited).write(); } }

また、手動での登録を使用している場合は、builder メソッドの transformProfiles() を使用することができます:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public final class MyPipelineDefiner implements PipelineDefiner { @Override public void define(Pipeline pipeline) { // 低レベルの変換を定義します。この場合、「profile1」と「profile2」のプロファイルを使用します LowLevelTransform lowLevelManualTransform = LowLevelTransform.builder() .transformProfiles(ImmutableList.of("profile1", "profile2")) // 使用する計算関数を渡します。ここでは、「LowLevelManualFunction」は低レベルのTransformの計算関数のクラス名に対応しています .computeFunctionInstance(new LowLevelManualFunction()) // 入力データセットへのパスとして "myInput" パラメータを入力エイリアスに置きます .putParameterToInputAlias("myInput", "/path/to/input/dataset") // 出力データセットへのパスとして "myOutput" パラメータを出力エイリアスに置きます .putParameterToOutputAlias("myOutput", "/path/to/output/dataset") .build(); // パイプラインに低レベルの変換を登録します pipeline.register(lowLevelManualTransform); } }

SQL

SQL コードで profile1profile2 プロファイルを参照するには、テーブルの foundry_transform_profiles プロパティを設定します:

Copied!
1 2 3 4 -- テーブルを作成します。出力先は`/path/to/output` で、テーブルプロパティには、foundry_transform_profiles という属性に 'profile1, profile2' を設定します CREATE TABLE `/path/to/output` TBLPROPERTIES (foundry_transform_profiles = 'profile1, profile2') -- 入力元から`/path/to/input` の全てのデータを選択してテーブルを作成します AS SELECT * FROM `/path/to/input`

以下は、別の SQL 構文を使用した例です:

Copied!
1 2 3 4 -- テーブル`/path/to/output`を作成します。使用するのはfoo_barで、オプションとしてfoundry_transform_profilesを'profile1, profile2'に設定します。 CREATE TABLE `/path/to/output` USING foo_bar OPTIONS (foundry_transform_profiles = 'profile1, profile2') -- `/path/to/input`から全てのデータを選択しています。 AS SELECT * FROM `/path/to/input`;

ANSI SQL モードでは、カスタム Transforms Profiles の指定は現在サポートされていませんのでご注意ください。