`@task.pyspark` does not template `config_kwargs` and `conn_id`
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 79/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- python
- Área
- backend, data-engineering
Línea de trabajo
Empieza por _PySparkDecoratedOperator y sus template_fields; después, compáralos con PySparkOperator.template_fields y el patrón del operador Kubernetes decorado mencionado en el issue. Reproduce el ejemplo con render_template_fields y confirma que conn_id y config_kwargs se renderizan para el operador decorado igual que para el operador clásico.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Under which category would you file this issue?
Providers
Apache Airflow version
3.3.2
What happened and how to reproduce it?
@task.pyspark does not render Jinja in config_kwargs (or conn_id). The same arguments passed to PySparkOperator are rendered.
PySparkOperator declares both as template fields:
PySparkOperator.template_fields == ("conn_id", "config_kwargs", "templates_dict", "op_args", "op_kwargs")
_PySparkDecoratedOperator does not define template_fields. DecoratedOperator comes before PySparkOperator in its MRO, so it inherits DecoratedOperator's fields and drops the two Spark-specific ones:
_PySparkDecoratedOperator.template_fields == ("op_args", "op_kwargs")
Templated values in config_kwargs therefore reach Spark as literal text when the decorator is used.
Reproduction:
from airflow.providers.apache.spark.operators.spark_pyspark import PySparkOperator
from airflow.sdk import DAG, task
conf = {"spark.app.name": "app-{{ run_id }}"}
with DAG("repro", schedule=None):
@task.pyspark(config_kwargs=conf)
def decorated(spark=None):
pass
decorated_op = decorated().operator
classic_op = PySparkOperator(task_id="classic", python_callable=lambda spark=None: None, config_kwargs=conf)
context = {"run_id": "manual__1"}
for op in (decorated_op, classic_op):
op.render_template_fields(context)
print(type(op).__name__, op.config_kwargs["spark.app.name"])
Output:
_PySparkDecoratedOperator app-{{ run_id }}
PySparkOperator app-manual__1
What you think should happen instead?
@task.pyspark should template conn_id and config_kwargs exactly like PySparkOperator. The decorated operator can declare the union of both sets of fields, the way _KubernetesDecoratedOperator keeps the fields of KubernetesPodOperator:
template_fields: Sequence[str] = (*DecoratedOperator.template_fields, "conn_id", "config_kwargs")
Operating System
Linux
Deployment
Virtualenv installation
Apache Airflow Provider(s)
apache-spark
Versions of Apache Airflow Providers
apache-airflow-providers-apache-spark==6.3.4
apache-airflow-providers-common-compat==1.23.0
Official Helm Chart version
Not Applicable
Kubernetes Version
No response
Helm Chart configuration
No response
Docker Image customizations
No response
Anything else?
The decorator never templated these fields: before PySparkOperator was introduced it declared template_fields = ("op_args", "op_kwargs") explicitly. The operator refactor made the inconsistency visible, since the same arguments now behave differently on the two entry points.
Are you willing to submit PR?
- Yes I am willing to submit a PR!
Code of Conduct
- I agree to follow this project's Code of Conduct
- Lenguaje dominante
- Python
- Estrellas
- 47.3k
- Forks
- 18.1k
- Merge medio
- 18 h 16 min
- PR fusionados (30 d)
- 647
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/airflow
-
update virtualenv to 21.14.12 or later to resolve emSign security issuePosiblemente ocupada @arifrhm la tomó hace 1 día. Abiertokind:bug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
apache/airflow#75858 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Trigger UI clamps Param min/max instead of rejecting out-of-range valuesPosiblemente ocupada @muditagrawal2007 la tomó hace 3 días. Abiertokind:bug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
apache/airflow#75747 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Deadline Alert: No support for SmtpNotifierPosiblemente ocupada @LiaoAB la tomó hace 5 días. Abiertokind:bug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
apache/airflow#75452 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
RedactedIO leaks secret bytes to stdoutPosiblemente ocupada @ShivanshhhG la tomó hace 11 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
apache/airflow#75069 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Task supervisor raises TypeError when a task log event has a key named target or msg, orphaning the task process and recording a successful task as failedPosiblemente ocupada @liwenjie200543 la tomó hace 11 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
apache/airflow#75017 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de apache/airflow
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
aws-samples/sample-per-model-bedrock#639 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 86/100
awslabs/visual-asset-management-system#937 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
project-codeflare/codeflare-sdk#1195 ·
Los mantenedores suelen responder en 1 día
-
Bump numpy dependencyAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
pandas-dev/pandas-stubs#2051 ·
Los mantenedores suelen responder en 1 día