Octubre de 2026 fue un mes intenso para los motores de datos. DuckDB 2.0 salió el 21 de octubre como versión de soporte prolongado, Polars 2.1 el 25 de octubre y Apache Spark 4.3 el 30 de octubre. Los tres son gratuitos y de código abierto, leen Parquet y Apache Iceberg y ya hablan SQL. ¿Cuál usar? Instalamos las nuevas versiones, ejecutamos las mismas consultas sobre los mismos 20 millones de filas y apuntamos lo que aprendimos.
Tres motores, tres diseños
DuckDB 2.0
Base de datos SQL en un archivo- Licencia
- MIT
- Estilo
- SQL primero, con clientes para Python, R, Java y Node
- Dónde se ejecuta
- en tu proceso, y ahora también como pequeño servidor (Quack)
- SQL excelente: joins ASOF y NEAREST, triggers, MERGE y un tipo VARIANT rápido para JSON
- Lee Parquet, CSV, JSON, Iceberg, Delta y DuckLake, en local o en el almacenamiento en la nube
- Soporte prolongado al menos hasta octubre de 2027
- Una sola máquina; los shuffles muy grandes aún requieren cuidado
Ideal para quien usa SQL, notebooks, backends de paneles y análisis en local.
Polars 2.1
Librería DataFrame- Licencia
- MIT
- Estilo
- expresiones en Python, más una interfaz SQL en crecimiento
- Dónde se ejecuta
- en tu proceso, con motor streaming por defecto
- Rápido, estricto y predecible: tipos y errores son explícitos
- Los group-by pueden volcar a disco cuando falta memoria
- Escribe y gestiona tablas Iceberg
- Requiere Python 3.11 o superior; algunas API nuevas son inestables
Ideal para desarrolladores de Python que sustituyen a pandas.
Spark 4.3
Motor distribuido- Licencia
- Apache 2.0
- Estilo
- SQL, DataFrames de PySpark, Scala y Java
- Dónde se ejecuta
- en clústeres, con Databricks, Fabric, EMR, Dataproc o propios
- Escala en muchas máquinas, hasta cientos de terabytes
- Streaming en tiempo real con estado, ahora en torno a 150 ms P99
- El estándar en Databricks y Microsoft Fabric
- Segundos de arranque y coste fijo por consulta con datos pequeños
Ideal cuando una máquina no basta.
El benchmark
Generamos un archivo Parquet con 20 millones de filas de ventas (236 MB, cuatro columnas) y una tabla pequeña de 1.000 tiendas, y ejecutamos dos consultas en cada motor, leyendo los archivos Parquet cada vez. Indicamos la más rápida de tres ejecuciones. La máquina era una VM en la nube modesta con 2 núcleos y 7 GB de memoria, así que en la tuya las cifras absolutas serán otras: lo que importa es el orden.
La más rápida de 3 ejecuciones. DuckDB 2.0.0, Polars 2.1.0, pandas 3.1.0, PySpark 4.3.0 en modo local con 2 núcleos. Cada ejecución lee el archivo Parquet.
Misma máquina y método. El join añade 1.000 filas de tiendas a 20 millones de filas de ventas.
El resultado es claro. En una sola máquina, DuckDB y Polars juegan en otra liga, y cuál es más rápido depende de la consulta: Polars se adelantó un poco en la agregación con muchos grupos y DuckDB fue más del doble de rápido en el join. pandas, que carga todo en memoria primero, fue entre 2,5 y 8 veces más lento. Spark fue el más lento, como era de esperar: está pensado para repartir el trabajo entre muchas máquinas, y con dos núcleos sobre todo se mide su coste de coordinación.
Consultas pequeñas: donde se nota el coste fijo
El nuevo ajuste Project Feather de Spark 4.3 bajó la consulta mínima de 85 a 53 ms al evitar el shuffle, una mejora real para probar código con muestras. Pero DuckDB y Polars responden en alrededor de un milisegundo, y arrancar una sesión local de Spark tardó 5,3 segundos antes de ejecutar ninguna consulta. Si tus datos caben en un portátil, esa diferencia se acumula durante todo el día.
Más allá de la velocidad
| DuckDB 2.0 | Polars 2.1 | Spark 4.3 | |
|---|---|---|---|
| Interfaz principal | SQL | Expresiones en Python | SQL y PySpark |
| Más grande que la memoria | Sí, vuelca a disco | Sí, motor streaming y group-by que vuelcan a disco | Sí, en un clúster |
| Más grande que una máquina | No | No (código abierto) | Sí |
| Streaming | No | Procesamiento por lotes de archivos grandes | Sí, también en tiempo real con estado |
| Formatos de tabla abiertos | Iceberg, Delta, DuckLake | Iceberg en lectura y escritura, Delta | Iceberg y Delta, el motor de referencia |
| Acceso compartido | Nuevo modo servidor Quack | Solo en el proceso | Spark Connect, clústeres multiusuario |
| Agentes de IA para código | Modo agente en la CLI que reduce tokens de salida | Errores claros, tipos estrictos | Feather acelera el ciclo de probar y corregir |
Cómo elegir
- 1
Estima tu tabla más grande
Por debajo de unos 100 GB de Parquet suele bastar una sola máquina con DuckDB o Polars. Si llegas a los terabytes o creces deprisa, planifica Spark o un almacén de datos en la nube.
- 2
Elige según el lenguaje del equipo
Quien piensa en SQL es productivo con DuckDB en una hora. Quien desarrolla en Python preferirá las expresiones de Polars.
- 3
Mira dónde se ejecuta el trabajo
Si la empresa usa Databricks o Microsoft Fabric, Spark ya está ahí y gestionado, y los trabajos pequeños pueden usar DuckDB o Polars en los mismos notebooks.
- 4
¿Necesitas tiempo real? Usa Spark
Ni DuckDB ni Polars procesan flujos de eventos con estado. Spark 4.3 ya lo hace con una latencia de alrededor de una décima de segundo.
- 5
Guarda los datos en formatos abiertos
Almacena las tablas en Parquet o Iceberg para poder cambiar de motor sin migrar datos.
Pon a prueba lo que has aprendido
1/3En nuestra prueba de join y group-by sobre 20 millones de filas, ¿qué motor fue el más rápido?
DuckDB tardó 0,20 segundos, Polars 0,48, pandas 1,62 y Spark 1,83.
2/3¿Cuándo es Spark la opción adecuada frente a DuckDB o Polars?
La fuerza de Spark es la escala y el streaming; con datos pequeños domina su coste fijo.
3/3¿Qué hace Project Feather en Spark 4.3?
En nuestra prueba bajó una consulta mínima de 85 a 53 ms.
Has acertado 0 de 3.
Profundiza: DuckDB 2.0, Polars 2.1, Spark 4.3, la chuleta de Polars y cómo elegir una base de datos.
Fuentes: anuncio de DuckDB 2.0.0 (21 de octubre de 2026), notas de versión de Polars 2.1 (25 de octubre de 2026) y de Apache Spark 4.3.0 (30 de octubre de 2026). Los benchmarks son nuestros, realizados el 9 de noviembre de 2026 en una VM en la nube con 2 núcleos y 7 GB y datos sintéticos; son orientativos y no sustituyen una prueba con tu propia carga.
