La versión 2.0 de Polars ha llegado, y de forma silenciosa argumenta a favor de que SQL esté integrado en el lenguaje en lugar de tratarse como una característica adicional añadida posteriormente. La actualización incluye soporte de “spill-to-disk” fuera del núcleo, un motor de transmisión y un nuevo tipo de datos Map. También presenta nuevos resultados de referencia que muestran que Polars supera a DuckDB y DataFusion en pruebas SQL comunes.
Un aumento de versión no estaba destinado a indicar una publicación importante de funciones, según la publicación del anuncio. Sin embargo, lo ha sido de todas formas. Esta publicación proporciona muchas razones para entusiasmarse.
Lo que realmente aporta la versión 2.0
Los aspectos destacados de la publicación se pueden dividir en cinco partes:
- Soporte inicial fuera del núcleo (“spill-to-disk”), ahora habilitado de forma predeterminada
- Mejoras generales del rendimiento en todo el sistema
- Soporte completo de SQL tratado como un ciudadano de primera clase
- Un nuevo tipo de datos Map
- Manejo más estricto de los tipos de datos y mayor explicitud, lo que lleva a una retroalimentación más rápida y una iteración de IA más rápida
Polars has added two major features: out-of-core support and a streaming engine. Out-of-core support means the library spills data to disk when memory is exhausted, instead of failing or grinding to a halt. The streaming engine alters how queries are gathered, so that a call to collect on a LazyFrame now defaults to using it. That change brings substantial gains in memory use and speed across most queries.
SQL como Ciudadano de Primera Clase
En los últimos años, Polars ha construido un motor sólido. Ahora, en la versión 2.0, el objetivo del equipo es que ese motor pueda manejar más tipos de trabajo, incluido SQL. Hacer que esto sea rápido requirió enviar muchas mejoras al optimizador y al motor.
Polars ha convertido los entresgos internos de SQL en parte de su paquete estándar en lugar de un conjunto de características separado. Las mejoras clave incluyen el reordenamiento de uniones, la eliminación mejorada de subplan comunes y los predicados dinámicos y los filtros de Bloom. Estas son las herramientas que hacen que SQL se ejecute rápidamente.
Los Números de Referencia
El equipo probó Polars ejecutando evaluaciones comparativas en datos obtenidos de TPC-H y TPC-DS1, comparando su rendimiento contra varios otros proyectos. Esas comparaciones incluyeron la versión actual de DuckDB (1.5.6), una versión preliminar de DuckDB (2.0 alpha, 2.0.0.dev2610011535), y la versión más reciente de DataFusion (54.0.0).
| Máquina | vCPUs | RAM |
|---|---|---|
| c7a.4xlarge | 16 | 32GB |
| c7a.metal | 192 | 384GB |
Cada consulta se ejecutó a través de cinco iteraciones en un estado «caliente», con un proceso dedicado a cada consulta y un límite de 60 segundos. La caché de archivos se vació después de cada par de motor/evaluación comparativa, aunque no entre consultas individuales.
El equipo seleccionó la mejor ejecución de cada uno de los cinco intentos para comparación, midiendo los motores contra el total y el promedio geométrico de esos tiempos de consulta. Los datos provinieron de tpcgen-cli construido a partir del código fuente en el commit 99bedae, con las consultas SQL producidas usando tpch_queries() y tpcds_queries() de DuckDB 1.5.6. El almacenamiento se ubicó en EBS.
En c7a.4xlarge, DataFusion encontró un tiempo de espera al procesar TPC-DS q72 y una vez en q67, y agotó su memoria en TPC-H q18. Estas tres consultas se omiten de los resultados para cada motor enumerado anteriormente.
) Lo que muestran los gráficos
) Los resultados destacan. Por defecto, Polars es el más rápido en cada punto de referencia excepto en uno. Al aumentar la escala hasta 192 hilos, Polars lleva una sobrecarga constante que perjudica las consultas con datos pequeños. De hecho, limitar Polars a solo 32 núcleos lo hace competitivo o ganador en todos los puntos de referencia.
) El origen del problema fue identificado por el equipo en su lado, y planean abordarlo en la próxima versión. Más detalles sobre las pruebas aparecen en el apéndice, donde el equipo también invita a otros a confirmar los hallazgos. Una colección separada que contiene el material de prueba se encuentra en https://github.com/pola-rs/polars-2.0-benchmark.
) Motor de transmisión y OOC como predeterminado
The shift in default behavior for collect on a LazyFrame is one of the largest changes in 2.0. Rather than running on the legacy engine, it now defaults to the streaming engine. This switch brings about significant gains in both memory efficiency and query performance across most use cases.
For some operations, such as join, group_by, and unpivot, the streaming engine doesn’t ensure row-order by default. Should you need to observe row-order in these operations, you can enable it by setting maintain_order=True.
) El vertido a disco se activa por defecto ahora. Una consulta comienza a mover datos al almacenamiento cuando ha utilizado alrededor del 80% de la memoria disponible, un umbral que podría requerir ajuste. Varias operaciones actualmente permiten este comportamiento: ordenación, funciones de ventana y muchas expresiones, todas las cuales ahora pueden comenzar a escribir resultados intermedios en el disco para completar su trabajo.
) El límite inicial de espacio en disco es de 64 GB. El equipo planea activar pronto el soporte fuera de núcleo para operaciones de unión y agrupación. Una vez que se realicen ambos cambios, Polars podrá manejar mucho mejor las cargas de trabajo de alta memoria para las personas que lo utilizan de forma casual.
) El nuevo tipo de datos Map
) Polars ahora admite directamente el Arrow MapType como un tipo de datos Polars Map. Puede pensar en un Map como un diccionario de Python, que asigna claves a valores. Antes de la versión 2.0, el Arrow MapType se leía en Polars como List(Struct({«key»: …, «value»: …})).
) Aquí tiene un ejemplo de cómo se ve este nuevo tipo de datos en la práctica:
python
df = pl.DataFrame({
"user": ["alice", "bob", "carol"],
"scores": pl.Series([
{"math": 90, "art": 75}, {"math": 60}, {}
], dtype=pl.Map(pl.String, pl.Int64)),
"subject": ["art", "art", "math"],
})
) Este arreglo tiene una forma de (3), 3, y la presentación de su contenido es fácil de ver. Permite búsquedas por etiqueta y operaciones al estilo de diccionario sobre la columna.
python
df.select(
"user",
pl.col("scores").map.get("math").alias("math"), # fixed key
pl.col("scores").map.get(pl.col("subject")).alias("by_subject"), # key from another column
pl.col("scores").map.contains_key("art").alias("has_art"),
pl.col("scores").map.len().alias("n"),
pl.col("scores").map.keys().alias("keys"),
pl.col("scores").map.values().alias("values"),
)
) El resultado contiene seis columnas: math, by_subject, has_art, n, keys y values. Keys produce una lista de cadenas, mientras que values genera una lista de enteros.
) Por qué esto importa
La versión 2.0 de Polars representa un salto notable para un proyecto que se ha desarrollado silenciosamente a lo largo del tiempo. Los resultados de referencia lo demuestran de la manera más directa, aunque el anuncio también apunta a un cambio en cómo Polars aborda SQL.
El motor de transmisión de Polars y el soporte fuera del núcleo fortalecen su rendimiento bajo fuertes demandas de memoria. La adición del tipo de datos Map cierra una brecha en lo que la biblioteca puede hacer. La verificación estricta de tipos también acelera el desarrollo, con el equipo citando una retroalimentación más rápida y una iteración de IA más rápida como beneficios.
Esto no es un audaz golpe de marketing. Es una mejora técnica que sirve a las personas que dependen de la herramienta día tras día.
La Próxima Versión
El problema de escalabilidad en su extremo ha sido diagnosticado, y el equipo espera abordarlo en la próxima versión. Eso representa una promesa que vale la pena vigilar. Mientras tanto, la hoja de ruta de la unión y agrupación fuera del núcleo es digna de mención, ya que una vez que esas características estén habilitadas, el caso para la resiliencia será aún más convincente.
Polars ha estado construyendo un motor sólido durante los últimos años. En 2.0, finalmente está tratando a SQL como un ciudadano de primera clase. Los puntos de referencia demuestran las mejoras.
Esta actualización es un informe fáctico sobre la tecnología en sí, no una campaña promocional. Describe una herramienta que ha sido mejorada, con pruebas que respaldan la afirmación. En casi todas las pruebas, Polars surge como la opción predeterminada más rápida.
Material fuente: “Lanzamiento de Polars 2.0”, pola.rs.
Recibe El Cuaderno.
Las mejores historias del día y cada veredicto nuevo, en español claro, en tu correo a las siete. Un correo al día, nada más.

