es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La velocidad de escritura en las tablas Delta aumenta significativamente después de copiarla en Databricks.

Estoy fusionando un dataframe de PySpark en una tabla Delta. El delta de salida está particionado por FECHA. La siguiente consulta tarda 30s en ejecutarse:

query = DeltaTable.forPath(spark, RUTA_DE_LA_TABLA).alias(
            "actual"
        ).merge(
            spark_df.alias("sdf"),
            "actual.FECHA >= fecha_actual() - INTERVALO 1 DÍAS 
             AND (actual.feat1 = sdf.feat1) 
             AND (actual.TIEMPO = sdf.TIEMPO) 
             AND (actual.feat2 = sdf.feat2) "
            ,
        ).whenNotMatchedInsertAll()

Después de copiar el contenido del Delta a otra ubicación, la consulta anterior se vuelve 60 veces más rápida (es decir, tarda 0.5s en el mismo clúster) al utilizar NUEVA_RUTA en lugar de RUTA_DE_LA_TABLA. Aquí está el comando para copiar el delta:

(spark.read.format("delta").load(RUTA_DE_LA_TABLA).write.format(
        "delta"
    )
.mode("sobrescribir").partitionBy(["FECHA"]).save(NUEVA_RUTA))

¿Cómo puedo hacer que la consulta en el primer delta sea tan rápida como en el nuevo? Entiendo que Delta tiene un sistema de versiones y sospecho que es la razón por la que tarda tanto tiempo. Intenté limpiar la tabla Delta (lo que redujo el tiempo de consulta a 20s) pero aún estoy lejos de los 0.5s.

Configuración:

  • Python 3.7;
  • Pyspark 3.0.1;
  • Databricks Runtime 7.3 LTS
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay varias formas en las que puedes optimizar el rendimiento de las consultas en la primera tabla Delta:

    1. Optimizar la condición de fusión: La condición de fusión en la consulta puede tener un gran impacto en el rendimiento. Puedes intentar simplificar la condición de fusión o dividirla en condiciones separadas para ver cuáles están ralentizando la consulta.
    2. Habilitar el ordenamiento ZORDER: Delta Lake admite el ordenamiento ZORDER, que puede mejorar significativamente el rendimiento de las consultas al organizar los datos dentro de cada partición. Puedes usar la cláusula ZORDER BY al escribir datos en la tabla Delta para optimizar el rendimiento de la consulta.

    3. Usar la caché de Delta: Delta Lake proporciona un mecanismo de caché que te permite almacenar en caché los marcos de datos o tablas en memoria o en disco para acelerar el rendimiento de las consultas. Puedes intentar almacenar en caché la tabla Delta antes de ejecutar la consulta para ver si mejora el rendimiento.

    4. Optimizar la configuración del clúster: Dependiendo del tamaño de tus datos y la complejidad de la consulta, es posible que debas ajustar la configuración del clúster para asignar más recursos. Puedes intentar aumentar el número de nodos o ajustar las configuraciones de memoria y CPU para optimizar el rendimiento.

    5. Optimizar la tabla Delta: Puedes optimizar la tabla Delta mediante el análisis y la optimización de los datos utilizando el comando OPTIMIZE. Esto compactará los archivos pequeños y eliminará las versiones antiguas, lo que puede mejorar el rendimiento de las consultas.

    En resumen, hay varias formas de optimizar el rendimiento de las consultas en la primera tabla Delta. Puedes intentar optimizar la condición de fusión, habilitar el ordenamiento ZORDER, usar la caché de Delta, optimizar la configuración del clúster u optimizar la tabla Delta utilizando el comando OPTIMIZE.

Comments are closed.