注: 以下の翻訳の正確性は検証されていません。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オブジェクト(入力データセットと出力データセット、および変換ロジックを記述する)の作成についての詳細は、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 バージョンがサポートされています: 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 >=3.6
や python >3.7,<=3.8.7
のような範囲は、Python バージョンに対してサポートされていません。トランスフォームに特定のライブラリバージョンが必要であり、これをパッケージタブを使用するのではなく手動で追加したい場合は、requirements
ブロック内でライブラリ名と一緒に明示的に指定できます。以下は、固定の例です:
Copied!1 2 3 4 5 6 7
requirements: run: # 以下は明示的なバージョンを固定します - mylibrary 1.0.1 # 以下は最大バージョンを指定します (同じバージョンかそれ以下): - scipy <=1.4.0
注意:
scipy <= 1.4.0
は CI チェックに失敗します。>=
オペレータはまだサポートされていません。変換に 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 ライブラリでは使用できません。