如何在Apache Airflow中的SparkSubmitOperator中将文件作为参数传递

时间:2019-01-04 14:00:42

标签: apache-spark airflow

火花提交命令

spark-submit --class=com.test.App  /home/ubuntu/app.jar /home/ubuntu/abc.properties

用于调度火花作业的气流脚本

from airflow import DAG
from datetime import datetime, timedelta
from airflow.contrib.operators import SparkSubmitOperator 
import sys
import os
from airflow.models import Variable
from airflow.operators.python_operator import PythonOperator

current_date = datetime.now() 

default_args = {
    'owner': 'airflow',
    'catchup' : False,
    'depends_on_past': False,
    'start_date': datetime(2019, 1, 4, 13, 22),
    'email': ['airflow@example.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 0,
    'retry_delay': timedelta(minutes=1),
}

dag = DAG(
    'test', default_args=default_args, schedule_interval=timedelta(minutes=5))

spark_task1 = SparkSubmitOperator(
    task_id='LoadRawPOPToCassandra',
    application='/home/ubuntu/app.jar',
    java_class='com.test.App',
    application_args="/home/ubuntu/abc.properties",
    dag=dag)

spark_task1

它给出错误的airflow.exceptions.AirflowException。 SparkSubmitOperator将文件名(application_args)的每个字符用作参数。

如何在SparkSubmitOperator运算符中将文件路径作为参数传递。 我尝试使用文件而不是SparkSubmitOperator参数中的application_args,但是出现相同的错误。我将spark用作本地

1 个答案:

答案 0 :(得分:0)

根据documentation,SparkSubmitOperator的application_args参数采用一个列表,而不是字符串,因此要传递的内容如下:

application_args=["/home/ubuntu/abc.properties"],