Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una etapa de larga duración con una sola tarea no tiene paralelismo. Mientras la tarea se ejecuta, una CPU realiza el trabajo y el resto del clúster puede estar inactivo. Añadir trabajadores no ayuda, porque Spark no puede repartir el trabajo entre ellos.
Utiliza esta página cuando la etapa más larga tenga exactamente una tarea. Si la fase tiene muchas tareas, compruebe si hay asimetría y desbordamiento. Consulte Asimetría y desbordamiento.
Causas comunes y correcciones
Una etapa de una sola tarea suele tener una de estas causas. Encuentra la que coincida con tu código y luego aplica la solución:
- Un costoso UDF sobre datos pequeños. Una entrada pequeña puede acabar en una sola partición, así que una tarea ejecuta todo el UDF. Reescribe el UDF usando funciones nativas si puedes. De lo contrario, aplique
repartition()al DataFrame antes de aplicar la UDF. Véase UDFs lentos. - Una función ventana sin
PARTITION BY. Sin unaPARTITION BYcláusula, la ventana abarca todo el conjunto de datos, así que una tarea procesa cada fila. Añade unaPARTITION BYcláusula si tu lógica lo permite. - Un tipo de archivo que no se puede dividir. Spark no puede leer archivos como los archivos gzip divididos en varias partes, así que una tarea grande lee cada archivo. Si lees los mismos archivos repetidamente, ingiérelos una vez en una tabla Delta Lake y consulta la tabla en su lugar.
- La opción
multiLineen lecturas de JSON o CSV. EstablezcamultiLinesolo cuando los registros abarquen varias líneas. Ver Leer archivos JSON de múltiples líneas. - Inferencia de esquema en un archivo grande. Especifica el esquema en lugar de inferirlo. Véase Especificar un esquema.
-
repartition(1)ocoalesce(1). Esto obliga a que todos los datos se almacenen en una sola partición. Eliminalos o usa más particiones, a menos que necesites un único archivo de salida.