私は、DataFlow RunnerでApache Beamパイプラインの内部で使用したいローカルのPythonパッケージを持っています。 https://beam.apache.org/documentation/sdks/python-pipeline-dependencies/(セクションローカルまたは非PyPI依存性)のドキュメントに記載された手順に従いましたが、成功しませんでした。 something.py
を含むファイルでApache BeamローカルPython依存関係
my_common
├── __init__.py
└── shared
├── __init__.py
└── something.py
:
私のパッケージには、以下の構造を有する
def hello_world():
return "Hello"
パッケージがビルドpython setup.py sdist
コマンドを使用していました。
さて、私は次のように設定されたApacheビームパイプラインがあります。
from my_common.shared import something
logging.info(something.hello_world())
私はスケジュールたびに:パイプラインマップ機能の
pipeline_parameters = [
'--project', project_id,
'--staging_location', staging_location,
'--temp_location', temp_location,
'--max_num_workers', 1,
"--extra_package", "/absolute/path/to/my/package/my_common-1.0.tar.gz"
]
p = beam.Pipeline("DataFlowRunner", argv=pipeline_parameters)
# rest of the pipeline definition
一つは、私のモジュールを使用して、次のコードを、持っていますこのパイプラインをDataFlowに渡すと、次のエラーが発生します。
ImportError: No module named shared
このパッケージ(.tar.gzから)を別の環境にインストールすると、問題なく関数をインポートして実行できます。 DataFlowは、パイプラインを実行する前にパッケージをインストールしないようです。
ローカルのPython依存関係をGoogle DataFlowに管理して展開する適切な方法は何ですか?
//更新: 私は私のパイプラインのために完全に別のフォルダとsetup.py
に私の地元のパッケージを持っている必要があるためhttps://stackoverflow.com/a/46605344/1955346で説明したソリューションは、私のユースケースには十分ではありませんが、すでに私が使用することはできません(一部のコンテンツを持っています外部パッケージのsetup.pyを参照)。
問題は、私のパイプラインにいくつかのカスタムコマンドが定義されている '' 'setup.py''をすでに持っていることです。他の方法はありますか? '' 'extra_packages'''の目的は何ですか? –
私はビームを1ヶ月間実験していますが、最初に「extra-packages」パラメータを使ってみましたが、それでも私はそれに恵まれませんでした。ドキュメンテーションは、それがどのように動作するかについて十分にはっきりしていません – Anuj
また、カスタムコマンドとセットアップファイルに 'packages'を提供するのはまったく問題ありません。何らかの理由がありません。カスタムコマンドに影響します。 – Anuj