簡體   English   中英

是否可以在本地沒有所有依賴項的情況下運行/序列化 Dataflow 作業?

[英]Is it possible to run / serialize Dataflow job without having all dependencies locally?

我已經使用 Apache Beam 為 Google Cloud Dataflow 創建了一個管道,但我不能在本地擁有 Python 依賴項。 但是,遠程安裝這些依賴項沒有問題。

在我的本地(開發)環境中不執行 Python 代碼是否可以以某種方式運行作業或創建模板?

看看這個教程 基本上,您編寫 python 管道,然后通過命令行部署它

python your_pipeline.py \
--project $YOUR_GCP_PROJECT \
--runner DataflowRunner \
--temp_location $WORK_DIR/beam-temp \
--setup_file ./setup.py \
--work-dir $WORK_DIR

關鍵部分是--runner DataflowRunner ,因此它使用 Google Dataflow(而不是您的本地安裝)來運行管道。 顯然,您必須設置您的 Google 帳戶和憑據。

好吧,我不是 100% 確定這是可能的,但你可以:

  • 定義一個requirements.txt文件,其中包含管道執行的所有依賴項
  • 避免在管道構建時導入和使用依賴項,僅在執行時代碼中。

因此,例如,您的文件可能如下所示:

import apache_beam as beam

with beam.Pipeline(...) as p:
  result = (p | ReadSomeData(...)
            | beam.ParDo(MyForbiddenDependencyDoFn()))

在同一個文件中,您的 DoFn 將從管道執行時代碼中導入您的依賴項,例如process方法。 看:

class MyForbiddenDependencyDoFn(beam.DoFn):

  def process(self, element):
    import forbidden_dependency as fd
    yield fd.totally_cool_operation(element)

執行管道時,您可以執行以下操作:

python your_pipeline.py \
    --project $GCP_PROJECT \
    --runner DataflowRunner \
    --temp_location $GCS_LOCATION/temp \
    --requirements_file=requirements.txt

我從未嘗試過,但它可能會起作用:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM