注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
このガイドでは、Code Repositories アプリケーションを使った簡単な変換例を順に説明します。メディアセットを扱う Python コードの記述方法と編集方法を学びます。
まず、新しいリポジトリを作成します。Foundry のプロジェクトに移動し、右上の + 新規を選択してから、Code repository を選択します。
このガイドでは、Python トランスフォームを記述します。リポジトリに名前を付け、Template の言語のドロップダウンメニューで Python を選択します。次に、初期化を選択します。

使用する未加工メディアセットをすでにインポートしている場合は、次のステップに進めます。まだインポートしていない場合は、メディアセットのガイドの Foundry にメディアをインポートする方法を参照してください。
transforms-media ライブラリをインポートするメディアセットの変換を使用するには、transforms-media ライブラリをインポートする必要があります。
左サイドバーのライブラリに移動し、transforms-media ライブラリを検索して選択します。次に、ライブラリの追加とインストールを選択します。

インストールが完了すると、ステータスにライブラリがインストールされましたと表示されるはずです。

Python トランスフォームリポジトリを作成すると、ベースとして使用できる examples.py ファイルが自動生成されるはずです。省略記号アイコンを選択し、名前を変更を選んで適切な名前を付けることで、ファイル名を変更できます。

新しいファイルを作成する場合は、データセットディレクトリの省略記号アイコンを選択し、新規ファイルを選びます。このワークフローでは、必ず Python ファイルを作成してください。
メディアセットを扱う場合は、@transform デコレーターを使用する必要があります。メディアセットの入力と出力は、transforms.mediasets.MediaSetInput と transforms.mediasets.MediaSetOutput の指定を使って渡す必要があります。
Copied!1 2 3 4 5 6from transforms.api import transform from transforms.mediasets import MediaSetInput, MediaSetOutput @transform( images=MediaSetInput('/examples/images'), ... )
メディアセットの出力ファイルを作成する場合は、トランスフォームのデコレーターで参照する前に、必ず作成してください。
このファイルを作成するには、プロジェクトフォルダー(最初に Python トランスフォームのコードリポジトリを作成した場所)に移動し、ドロップダウンメニューから新規 > メディアセットを選択します。

get_media_item()、get_media_item_by_path()、または list_media_items_by_path_with_media_reference() を使用するメディアセット内の各メディアアイテムを変換するには、変換処理で get_media_item() または get_media_item_by_path() を使って、これらのメディアアイテムを参照する必要があります。
get_media_item() と get_media_item_by_path() を呼び出すと、Python のファイルライクなストリームオブジェクトが返されます。io.open() ↗ が受け付けるすべてのオプションにも対応しています。メディアアイテムはストリームとして読み込まれるため、ランダムアクセスには対応していません。
個々のメディアアイテムは、次のように参照できます。
Copied!1 2 3 4 5 6 7 8 9from transforms.api import transform from transforms.mediasets import MediaSetInput, MediaSetOutput @transform( images=MediaSetInput('/examples/images'), output_images=MediaSetOutput('/examples/output_images') ) def translate_images(images, output_images): image1 = images.get_media_item_by_path("image1") # パスを使用します image2 = images.get_media_item("ri.mio.main.media-item.123") # RID を使用します
ただし、通常はメディアセット内のすべてのメディアアイテムをデータフレームに格納して一覧化することになります。メディアアイテムを一覧化するには、list_media_items_by_path_with_media_reference() を使用する必要があります。
Copied!1 2 3 4 5 6 7 8 9 10from transforms.api import transform, Output from transforms.mediasets import MediaSetInput @transform( images=MediaSetInput('/examples/images'), listing_output=Output('/examples/listed_images') ) def translate_images(ctx, images, listing_output): media_items_listing = images.list_media_items_by_path_with_media_reference(ctx) # 一覧として出力されたデータに対して、任意の PySpark 関数を実行できます
一覧のスキーマは次のようになります。
+--------------------------+-----------+-------------------+
| mediaItemRid | path | mediaReference |
+--------------------------+-----------+-------------------+
| ri.mio.main.media-item.1 | item1.jpg | {{reference1}} |
| ri.mio.main.media-item.2 | item2.jpg | {{reference2}} |
| ri.mio.main.media-item.3 | item3.jpg | {{reference3}} |
+--------------------------+-----------+-------------------+
この例では、PDF メディアセット内のすべてのメディアアイテムをループ処理し、PNG 画像として保存します。
入力例:

list_media_items_by_path_with_media_reference() はデータフレームを返すため、その出力に対して PySpark 関数を実行できます。この例では、mediaItemRid 列の値を収集し、配列としてループ処理します。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15from transforms.api import transform from transforms.mediasets import MediaSetInput, MediaSetOutput @transform( pdfs=MediaSetInput('INPUT_MEDIA_SET_PATH'), output_pngs=MediaSetOutput('OUTPUT_MEDIA_SET_PATH') ) def upload_images(ctx, pdfs, output_images): media_items_listing = pdfs.list_media_items_by_path_with_media_reference(ctx) rid_list = media_items_listing.rdd.map(lambda x: x.mediaItemRid).collect() for rid in rid_list: output_png = pdfs.transform_document_to_png(rid, 0) output_images.put_media_item(output_png, "PNG_"+rid)
これにより、PNG ファイルを含む出力メディアセットが作成されます(メタデータプロパティで確認できます)。

標準で利用可能な変換の一覧は、ドキュメントで確認できます。
データ変換コードを記述したら、加えた変更をテストすることを推奨します。テストによって、変更をマージする前に、コードが期待どおりに動作することを確認できます。
Foundry では、コードリポジトリと同様に、メディアセットでもブランチを作成できます。ブランチの作成は、複数ステップのデータパイプラインの設計をテストする際に役立ちます。たとえば、このブランチに依存しないユーザーの下流の依存関係を壊すことなく、データパイプラインの一部に対する変更を個別にテストできます。
ここで、Code Repositories で変更をコミットして、実施した作業にラベルを付けられます。コミットする前も、デフォルトでは作業内容が自動保存されます。コミットは、作業の区切りに達した時点で、一連の変更に明示的にラベルを付けるものです。
コミットボタンを選択すると、変更がコミットされ、コードの自動チェックが実行されます。Build ボタンを選択した場合も、変更がコミットされ、コードの自動チェックが実行され、出力データセットのビルドが開始されます。データセットをビルドせずに変更をすばやくテストし、コードがチェックに合格することを確認するには、コミットを選択します。それ以外の場合は、変更をマージしてビルドするに進めます。
新しいメディアセットの出力に問題がなければ、共同作業者と協力して変更をマージし、ビルドして、表示します。