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

プロジェクト構造

デフォルトのブートストラップ済みリポジトリ

以下は、ブートストラップされた Transforms Python リポジトリの標準構造です:

transforms-python
├── conda_recipe
│   └── meta.yaml
└── src
    ├── myproject
    │   ├── __init__.py
    │   ├── datasets
    │   │   ├── __init__.py
    │   │   └── examples.py  # 例のデータセット
    │   └── pipeline.py  # パイプラインの定義
    ├── setup.cfg
    └── setup.py

リポジトリ内には、Code Repositories の File Explorer タブでSettings歯車アイコンをクリックし、Show hidden files and foldersを選択することで表示できる追加ファイルもあります。ほとんどの場合、これらの隠しファイルは編集しないでください。Palantirは、これらの隠しファイルにカスタム変更が加えられたリポジトリについてはサポートしていません。

以下のファイルについては以下で詳しく説明します:

このページを読む前に、getting started guideを確認してください。また、このページでは、Transforms Pythonリポジトリに含まれるデフォルトのプロジェクト構造を使用していることを前提としています。

リポジトリアップグレードファイルの変更

リポジトリを初めて作成する際、その時点での最新の Transforms Python テンプレートのデフォルト内容でブートストラップされます。その後のリポジトリのアップグレードでは、リポジトリ内のファイルが最新の Transforms Python テンプレートの内容に合わせてアップグレードされます。これらのファイルへのカスタムユーザー変更は、新しいアップグレードテンプレートで上書きされることがあります。これらのファイルへのカスタム変更はサポートされておらず、予期しない動作につながることがあります。

以下のファイルはリポジトリのアップグレードで上書きされません:

  • conda_recipeおよびsrcフォルダー内のデフォルトファイル
  • 内部および外部のbuild.gradleファイル

以下のファイルは、リポジトリのアップグレード中に最新の Python テンプレートファイルとマージされます。共通キーがある場合、Python テンプレートのバージョンが選択されます:

  • gradle.properties
  • versions.properties

残りのファイルは、アップグレードによって最新の Python テンプレートファイルと一致するように上書きされます。

pipeline.py

このファイルでは、プロジェクトの Pipeline を定義します。これは、データ変換に関連する Transform オブジェクトのレジストリです。デフォルトのsrc/myproject/pipeline.pyファイルは以下のようになっています:

Copied!
1 2 3 4 5 6 7 8 # transforms.apiからPipelineをインポートします from transforms.api import Pipeline # myprojectからdatasetsをインポートします from myproject import datasets # Pipelineのインスタンスを作成します my_pipeline = Pipeline() # datasets内の変換を自動的に見つけてPipelineに追加します my_pipeline.discover_transforms(datasets)

デフォルトの pipeline.py ファイルでは、自動登録を使用して、Transform オブジェクトをプロジェクトのパイプラインに追加します。自動登録は、プロジェクトの datasets パッケージ内のすべての Transform オブジェクトを検出します。したがって、プロジェクトを再構築して変換ロジックが datasets フォルダー内に含まれない場合は、src/myproject/pipeline.py ファイルを適切に更新してください。

また、手動登録 を使用して、Transform オブジェクトをプロジェクトのパイプラインに明示的に追加することもできます。Transform オブジェクトをパイプラインに明示的に追加する必要があるワークフローがない場合は、自動登録を使用することをお勧めします。パイプラインオブジェクトについての詳細は、パイプラインに関するセクション を参照してください。

setup.py

このファイルでは、プロジェクトのパイプラインに関連付けられた transforms.pipeline エントリポイントである root を定義します。これにより、Transforms Python がプロジェクトのパイプラインを検出できます。デフォルトの src/setup.py ファイルは以下の通りです:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import os from setuptools import find_packages, setup setup( # パッケージの名前を環境変数から取得 name=os.environ['PKG_NAME'], # パッケージのバージョンを環境変数から取得 version=os.environ['PKG_VERSION'], # プロジェクトの説明 description='Pythonデータ変換プロジェクト', # プロジェクトの著者を修正 author='{{REPOSITORY_ORG_NAME}}', # 'contrib', 'docs', 'test' を除くパッケージを検索 packages=find_packages(exclude=['contrib', 'docs', 'test']), # 依存関係は conda_recipe/meta.yml で指定 install_requires=[], # エントリーポイントの設定 entry_points={ 'transforms.pipelines': [ # myproject.pipeline の my_pipeline がエントリーポイント 'root = myproject.pipeline:my_pipeline' ] } )

デフォルトのプロジェクト構造を変更した場合、src/setup.py ファイルの内容を変更する必要があるかもしれません。詳細は、transforms.pipelineエントリーポイントについて説明しているセクションを参照してください。

examples.py

このファイルは、ユーザーのデータ変換コードを含んでいます。以下はデフォルトの src/myproject/datasets/examples.py ファイルです:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 """ from transforms.api import transform_df, Input, Output from myproject.datasets import utils # データセットの変換を行う関数を定義するデコレータ @transform_df( Output("/path/to/output/dataset"), # 出力データセットのパス my_input=Input("/path/to/input/dataset"), # 入力データセットのパス ) # 変換を行う関数の定義 def my_compute_function(my_input): # utils.identityは入力をそのまま返す関数 return utils.identity(my_input) """

サンプルコードのコメントを解除した後、/path/to/input/dataset および /path/to/out/dataset をユーザーの入力データセットと出力データセットへの完全なパスに置き換えることができます。データ変換が複数のデータセットに依存している場合、追加の入力データセットを提供できます。また、my_compute_function を更新して、入力データセットを出力データセットに変換するコードを含める必要があります。また、1つのPythonファイルは複数の出力データセットの作成をサポートしていることを覚えておいてください。

サンプルコードでは DataFrame transform decorator を使用していることに注意してください。また、以下のものを使用することもできます:

  • transform decorator - データセットではなく、ファイルへのアクセスに依存するデータ変換を書いている場合、このデコレーターを使用すべきです。
  • Pandas transform decorator - Pandasライブラリーだけを使用して作業をしており、入力データがメモリに収まる場合、このデコレーターを使用すべきです。

Transformオブジェクト(入力データセットと出力データセット、および変換ロジックを記述する)の作成についての詳細は、Transformsの説明のセクションを参照してください。

meta.yaml

Condaのビルドレシピは、condaパッケージをビルドするために必要なすべてのメタデータとスクリプトを含むディレクトリです。ビルドレシピのファイルの1つは meta.yaml —このファイルにはすべてのメタデータが含まれています。このファイルの構造についての詳細は、meta.yamlファイルに関するcondaのドキュメンテーションを参照してください。 ここにデフォルトのconda_recipe/meta.yamlファイルがあります:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # パッケージのランタイム要件を変更する必要がある場合は、 # このファイルの 'requirements.run' セクションを更新してください package: name: "{{ PACKAGE_NAME }}" # パッケージ名 version: "{{ PACKAGE_VERSION }}" # パッケージのバージョン source: path: ../src # ソースコードのパス requirements: # パッケージをビルドするために必要なツール。これらのパッケージはビルドシステム上で実行され、 # バージョン管理システム(Git、SVN)、ビルドツール(GNU make、Autotool、CMake)、 # コンパイラー(実クロス、擬似クロス、またはクロスコンパイルしない場合のネイティブ)、およびソースプリプロセッサーを含みます。 # https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#build build: - python 3.8.* # Pythonのバージョン - setuptools # setuptools # パッケージを実行するために必要なパッケージ。これらは、パッケージがインストールされるたびに自動的にインストールされる依存関係です。 # https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#run run: - python 3.8.* # Pythonのバージョン - transforms {{ PYTHON_TRANSFORMS_VERSION }} # transformsのバージョン - transforms-expectations # transforms-expectations - transforms-verbs # transforms-verbs build: script: python setup.py install --single-version-externally-managed --record=record.txt # ビルドスクリプト

あなたの Transforms Python プロジェクトが追加のビルド依存関係を必要とする場合、パッケージタブを使用して利用可能なパッケージを探し、それらを meta.yml ファイルに自動的に追加できます。これはPython ライブラリの共有に関する文書で説明されています。このステップでは、インポートしようとしているパッケージを生成するチャネルが自動的に検出され、それをバッキングリポジトリとして追加します。

また、このファイルの "requirements" セクションを手動で更新することも可能です。ただし、利用できないパッケージやバージョンを要求したり、その結果、リポジトリのチェックが失敗するリスクがあるため、手動で行うことは強くお勧めしません。追加する依存関係については、依存関係に必要なパッケージが利用可能であることを確認してください。

"requirements" 以外のセクションを修正する必要があることはほとんどないことに注意してください。

サポートされている Python 3 のバージョン

以下の Python バージョンがサポートされています: Python 3.6、Python 3.7、Python 3.8、Python 3.9、および Python 3.10。

使用例:

Copied!
1 2 3 4 5 6 7 8 9 requirements: build: - python 3.7.* # Python 3.7.* をビルドに使用 - setuptools # setuptools を使用 # パッケージを実行するために必要な追加パッケージ。 run: - python 3.7.* # Python 3.7.* を実行に使用 - transforms {{ PYTHON_TRANSFORMS_VERSION }} # transforms (バージョンは PYTHON_TRANSFORMS_VERSION を参照)
  • ビルドと実行のセクションで Python の依存関係が同じであることを確認してください。Python の依存関係が一致しない場合、望ましくない結果や失敗が発生する可能性があります。
  • python >=3.6python >3.7,<=3.8.7 のような範囲は、Python バージョンに対してサポートされていません。
  • サポートされていない Python バージョンが使用された場合、デフォルトで Python 3.6.* になります。

実行時バージョンの固定

トランスフォームに特定のライブラリバージョンが必要であり、これをパッケージタブを使用するのではなく手動で追加したい場合は、requirements ブロック内でライブラリ名と一緒に明示的に指定できます。以下は、固定の例です:

Copied!
1 2 3 4 5 6 7 requirements: run: # 以下は明示的なバージョンを固定します - mylibrary 1.0.1 # 以下は最大バージョンを指定します (同じバージョンかそれ以下): - scipy <=1.4.0

注意:

  • オペレータの後にスペースを入れることはできません。例えば、scipy <= 1.4.0 は CI チェックに失敗します。
  • Foundry では、バージョンの >= オペレータはまだサポートされていません。

pip で管理される依存関係の使用

変換に Conda では利用できないが、pip を使用してインストールすると利用できる特定のライブラリが必要な場合、追加の pip セクションでそれらを宣言することができます。依存関係は Conda 環境の上にインストールされます。以下は、pip 依存関係を追加する例です:

Copied!
1 2 3 4 5 6 7 8 9 10 11 requirements: build: # ビルド要件 - python 3.7.* # Python 3.7.* が必要 - setuptools # setuptools が必要 run: # 実行要件 - python 3.7.* # Python 3.7.* が必要 - transforms {{ PYTHON_TRANSFORMS_VERSION }} # transforms パッケージ(バージョンは PYTHON_TRANSFORMS_VERSION による) pip: # pip でインストールするパッケージ - pypicloud # pypicloud が必要

注:

  • pip セクションに追加された依存関係は、run セクションのパッケージから派生した Conda 環境の上にインストールされます。そのため、run または build を削除すると失敗します。
  • pip セクションは、Transforms Python リポジトリでのみ使用でき、Python ライブラリでは使用できません。