簡體   English   中英

將命令行 arguments 提交到 airflow 上的 pyspark 作業

[英]Submit command line arguments to a pyspark job on airflow

我在 GCP Dataproc 上有一個 pyspark 作業,將在 airflow 上觸發,如下所示:

config = help.loadJSON("batch/config_file")

MY_PYSPARK_JOB = {
    "reference": {"project_id": "my_project_id"},
    "placement": {"cluster_name": "my_cluster_name"},
    "pyspark_job": {
        "main_python_file_uri": "gs://file/loc/my_spark_file.py"]
        "properties": config["spark_properties"]
        "args": <TO_BE_ADDED>
    },
}

我需要為這個 pyspark 作業提供命令行 arguments,如下所示 [這就是我從命令行運行 pyspark 作業的方式]:

spark-submit gs://file/loc/my_spark_file.py --arg1 val1 --arg2 val2

我正在使用“configparser”向我的 pyspark 作業提供 arguments。 因此,arg1 是鍵,val1 是我上面的 spark-submit 命令中的值。

如何在上面定義的“MY_PYSPARK_JOB”中定義“args”參數[相當於我的命令行參數]?

我終於設法解決了這個難題。 如果我們正在使用 ConfigParser,則必須按如下方式指定密鑰 [無論參數是作為命令還是在氣流中傳遞]:

--arg1

在 airflow 中,配置作為 Sequence[str] 傳遞(如下面的@Betjens 所述),每個參數定義如下:

arg1=val1

因此,根據我的要求,命令行 arguments 定義如下:

"args": ["--arg1=val1",
    "--arg2=val2"]

PS:感謝@Betjens 的所有建議。

你必須傳遞一個Sequence[str] 如果您檢查DataprocSubmitJobOperator ,您將看到 params job實現了 class google.cloud.dataproc_v1.types.Job

class DataprocSubmitJobOperator(BaseOperator):
...
    :param job: Required. The job resource. If a dict is provided, it must be of the same form as the protobuf message.
    :class:`~google.cloud.dataproc_v1.types.Job` 

因此,在有關工作類型pySpark的部分,即google.cloud.dataproc_v1.types.PySparkJob

args Sequence[str] 可選。 arguments 傳遞給司機。 不要包括 arguments,例如--conf ,可以設置為作業屬性,因為可能會發生沖突,導致作業提交不正確。

暫無
暫無

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

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