스크립트
00:00:00El mayor competidor de Pandas está a punto de lanzar su versión 2.0.
00:00:04La actualización de Polars casi está aquí, y el cambio más grande probablemente no sea el que esperas.
00:00:09Por defecto, todas las consultas que ya has escrito se ejecutarán en un motor diferente.
00:00:14Sin cambiar ni una sola línea.
00:00:15Polars también deja de garantizar que las filas se devuelvan en el orden de entrada.
00:00:19Parece un retroceso, aunque no lo es; es el precio para hacer posible el primer cambio.
00:00:24A medida que Polars gana terreno con la 2.0, le está haciendo una seria competencia a Pandas.
00:00:30Echemos un vistazo a su actualización más importante hasta la fecha.
00:00:37Bien, desde el principio de los tiempos, Pandas siempre ha sido la opción preferida para el trabajo de datos.
00:00:43Es sencillo, lo usa muchísima gente y no solo va genial para analítica de datos, sino que también es clave en aprendizaje automático.
00:00:49Luego, hace un tiempo, llegó Polars.
00:00:51Siempre ha sido más rápido que Pandas.
00:00:53Ya hablaremos de eso.
00:00:54Ahora, con esta gran actualización 2.0, puede que esté más cerca de una adopción masiva.
00:01:00Para un poco de contexto, Polars ha tenido discretamente dos motores desde hace tiempo.
00:01:05El que la mayoría de la gente ha estado usando es el motor en memoria.
00:01:08Puedes imaginarlo como un almacén.
00:01:10Carga todo tu conjunto de datos en el suelo del almacén y luego ejecuta cada paso de la consulta por todo el espacio.
00:01:17Y eso es extremadamente rápido.
00:01:19Siempre que todo quepa en la memoria RAM.
00:01:21El motor de transmisión (streaming) funciona de manera diferente.
00:01:23En lugar de un espacio gigante, es más bien como una cadena de montaje.
00:01:27Polars divide los datos en trozos pequeños que los desarrolladores llaman “morsels”.
00:01:32Esos trozos están dimensionados para caber en la caché de tu CPU.
00:01:36Luego se procesan a través del plan de consulta.
00:01:39Así, diferentes partes de la consulta avanzan en lugar de esperar a todo el conjunto de datos.
00:01:43De ahí viene la velocidad.
00:01:44Y con el tiempo, también es el camino para trabajar con datos que superan la memoria RAM.
00:01:49Pero hay un truco.
00:01:50Si tienes ocho trabajadores en una cadena de montaje, no necesariamente terminan en el mismo orden en que empezaron.
00:01:56Y Polars tampoco.
00:01:58Así que en la 2.0, los joins, group bys, unpivots y, literalmente como dice la documentación, etc.
00:02:04Ya no garantizan el orden de las filas.
00:02:06A menos que lo pidas explícitamente.
00:02:08Si te gusta programar herramientas para agilizar tu trabajo, no olvides suscribirte.
00:02:11Publicamos vídeos continuamente.
00:02:13Bien, así es como se ve esto en la práctica.
00:02:15Voy a hacer `uv pip install --pre polars`.
00:02:18Y recuerda ese parámetro `--pre`.
00:02:20Volveremos a eso en un segundo.
00:02:22Vale.
00:02:22Tengo un LazyFrame con las claves 2, 1, 0.
00:02:27Le hago un `left join` con otro frame y luego ejecuto `collect`.
00:02:32Mira el resultado.
00:02:34Es el mismo código que en Polars 1.
00:02:35El orden ya no está garantizado.
00:02:37Es el mismo código, pero se comporta diferente.
00:02:39Ahora añado `maintain_order="left"` al join.
00:02:43Lo ejecuto de nuevo.
00:02:44Lo corro otra vez aquí.
00:02:45Y el orden original está de vuelta.
00:02:47Esto no significa que Polars esté mezclando los datos al azar.
00:02:51Es Polars diciendo: si el orden importa, indícalo.
00:02:54Tienes que indicárselo explícitamente.
00:02:56Y hay otro detalle interesante aquí.
00:02:58Ejecuta la función `explain` en una consulta.
00:03:01No oculta este comportamiento.
00:03:03Solo tienes que saber dónde buscar.
00:03:05Ese es el gran cambio de comportamiento.
00:03:06Pero la 2.0 es curiosa porque no es realmente una versión llena de funciones nuevas.
00:03:10En realidad es solo una limpieza.
00:03:12Y se está limpiando una cantidad considerable de cosas.
00:03:15El `read_csv` estilo Pandas ahora es solo `scan_csv` con un `collect` por debajo.
00:03:22El perfilado de LazyFrame ha desaparecido.
00:03:25`melt` pasa a ser `unpivot`.
00:03:28`join_nulls` pasa a ser `nulls_equal`.
00:03:30Se ha eliminado la conversión directa de entero a categórico.
00:03:35Ahora puedes usar `cat2` para solucionar esto.
00:03:38Se ha eliminado la conversión directa de cadena de texto a fecha.
00:03:41Eso es `str` a `date`.
00:03:43Al sumar un entero con signo y uno sin signo de 64 bits, Polars te devuelve un `int128` en vez de convertirlo a `float` y perder precisión en silencio.
00:03:53Y aún hay más cambios.
00:03:55Por ejemplo, al usar `concat`.
00:03:57Ahora rechaza las alturas no coincidentes en lugar de intentar adivinar lo que querías hacer.
00:04:02Esta es una decisión bastante acertada por parte de Polars.
00:04:05Cada elemento eliminado lanza un error `AttributeRemovedError`.
00:04:09Eso te dice exactamente por qué se ha reemplazado.
00:04:12Llamas a `melt` y el error te dice literalmente que uses `unpivot` con `index` y `on`.
00:04:17Todos estos errores se convierten prácticamente en una guía de uso.
00:04:20Ejecutas el código, algo se rompe, corriges ese fallo basándote en el error y sigues adelante.
00:04:26Y eso nos lleva a la razón por la que Polars se ha vuelto imprescindible para muchos.
00:04:31Pandas traslada muchos de sus problemas al tiempo de ejecución.
00:04:35Polars intenta detectarlos pronto con todo esto.
00:04:37Puedes llamar a `collect_schema` y descubrir que los tipos son incorrectos antes de que Polars lea una sola fila.
00:04:44Simplemente se anticipa a lo que va a ocurrir.
00:04:47Y se está volviendo cada vez más eficiente.
00:04:48Entonces, ¿dónde encaja exactamente Polars?
00:04:50Bueno, DuckDB está centrado en SQL.
00:04:53Polars es una API de expresiones diseñada para Python.
00:04:56También están Dask y Spark.
00:04:58Esos son distribuidos.
00:04:59Polars se enfoca en una sola máquina.
00:05:01La librería en sí es de código abierto.
00:05:04Polars Cloud no lo es.
00:05:05Y ese detalle clave cambia las cosas cuando hablamos de rendimiento.
00:05:09Este anuncio dice que el nuevo motor de transmisión es fácilmente cinco veces más rápido.
00:05:13He probado Polars a lo largo de los años y sí, es más rápido que Pandas, pero nunca he obtenido velocidades locas como cinco veces más rápido.
00:05:21Pruébalo con conjuntos de datos más grandes.
00:05:23Sin duda notarás la diferencia de velocidad.
00:05:25Variará en cada ejecución y con cada dataset, pero vas a sentir la diferencia y a verla en el tiempo de ejecución.
00:05:30Y esta es probablemente la distinción más importante de todo el lanzamiento.
00:05:34La parte que permitiría al motor volcar datos a disco, una verdadera ejecución fuera de memoria (out-of-core), aún no ha llegado.
00:05:40Así que hoy, “streaming” significa procesamiento en bloques y canalizado.
00:05:43Aún no significa que tu conjunto de datos pueda ser mágicamente mayor que la RAM.
00:05:46Ese multiplicador de 5x es la propia expectativa de Polars.
00:05:50No hay ninguna tabla de benchmarks en la publicación.
00:05:53Y sinceramente, a la mayoría de la gente parece parecerle bien.
00:05:55A muchos usuarios les alegró ver una versión útil aunque aburrida.
00:05:59No hay un montón de funciones nuevas.
00:06:01No tienes que aprender nada nuevo.
00:06:02Esos errores, mientras codificas, te irán diciendo por qué reemplazar cada cosa.
00:06:07Solo cambios disruptivos, limpieza y el versionado semántico usado como debe ser.
00:06:12Pero hay dos quejas que se repiten una y otra vez.
00:06:14La primera es el orden de las filas.
00:06:15Si `maintain_order` es `False` por defecto, puedes generar errores muy molestos en el código.
00:06:19Porque nada falla explícitamente.
00:06:21Tus números pueden seguir siendo totalmente correctos.
00:06:23Solo que están asignados a las filas en un orden diferente.
00:06:26Eso es mucho más difícil de notar que una excepción.
00:06:29La segunda queja fue el uso de la palabra “streaming” aquí.
00:06:32Muchos argumentan que es confuso para un motor que todavía no es verdaderamente out-of-core.
00:06:38Además, hay errores propios de la versión de prueba (release candidate).
00:06:41Desde que salió la RC, ha habido un problema de prioridad alta donde
00:06:44`group_by_dynamic` lanza un error de fecha fuera de rango en el motor de streaming.
00:06:49Llamas al método `limit`.
00:06:51Y bueno, `limit` no sale antes de tiempo después de un join.
00:06:54Y la conversión de cadena a fecha y hora puede devolver nulo en lugar de lanzar un error como antes.
00:06:58Por eso te dije que recordaras el comando de instalación con `--pre`.
00:07:02Previo a la 2.0.
00:07:04Esta sigue siendo una versión preliminar.
00:07:06Y de momento, se comporta como tal.
00:07:08Lo cual está bien.
00:07:09¿Verdad?
00:07:09Aún no es la versión definitiva.
00:07:11Una cosa más.
00:07:12La crate de Rust sigue en la versión 0.55.
00:07:15Así que si usas Polars desde Rust, aún no hay Polars 2.0 para ti.
00:07:19Pero voy a asumir que la mayoría de nosotros aquí simplemente usaremos Python.
00:07:24Ahora bien, ¿deberías actualizar?
00:07:25Bueno, para un proyecto nuevo, sí, yo lo haría.
00:07:27¿No?
00:07:27Nos adaptamos a las nuevas tecnologías y actualizaciones.
00:07:30Si tu pipeline ya utiliza `sink_parquet` o `sink_csv`, en la práctica has estado usando
00:07:34streaming todo este tiempo de todas formas.
00:07:36Pero hay algunos casos de uso en los que yo esperaría.
00:07:39¿Vale?
00:07:39Si tu código depende del orden de las filas, no actualices esperando que todo salga bien.
00:07:43Haz una búsqueda de los `group_by` que no tengan un ordenamiento posterior.
00:07:47Si estás usando `group_by_dynamic`, yo esperaría a que todo esto se estabilice.
00:07:51Y la verdad, es genial ver hacia dónde va a ir esto probablemente.
00:07:54Esta será probablemente la 2.0, pero aún no es la versión oficial.
00:07:57Puedes ir familiarizándote con ella, pero no está del todo lista.
00:08:00Lo que no dejo de pensar es lo poco habitual que se siente este lanzamiento.
00:08:03Polars 2.0 no incluye ninguna función nueva.
00:08:07Y aun así altera el comportamiento de tu código actual.
00:08:10El nuevo motor es más rápido en mi ordenador, solo que no cinco veces más rápido.
00:08:14Así que la 2.0 no es emocionante por añadir un montón de novedades.
00:08:18Es emocionante porque Polars aprovecha un salto de versión principal para limpiar a fondo la base
00:08:24de todo lo que ya estamos utilizando.
00:08:26Soy Josh de BetterStack.
00:08:28Si te gustan estos consejos y trucos de programación, no olvides suscribirte.
00:08:30Nos vemos en el próximo vídeo.
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기