스크립트
00:00:00O maior concorrente do Pandas está prestes a lançar a versão 2.0.
00:00:04A atualização do Polars está quase aí, e a maior mudança provavelmente não é a que você esperava.
00:00:09Por padrão, todas as consultas que você já escreveu passam a rodar em um motor diferente.
00:00:14Você não muda uma única linha.
00:00:15O Polars também deixa de garantir que as linhas voltem na ordem em que foram enviadas.
00:00:19Parece uma regressão, embora não seja, é o preço para viabilizar a primeira mudança.
00:00:24À medida que o Polars ganha mais força com a versão 2.0, ele está dando um baile no Pandas.
00:00:30Vamos dar uma olhada na maior atualização até agora.
00:00:37Bom, agora, desde o início dos tempos, o Pandas sempre foi a escolha padrão para a maioria dos trabalhos de dados.
00:00:43É simples, usado pelas massas, e não só funciona muito bem para análise de dados, mas também é fundamental no aprendizado de máquina.
00:00:49Então, um tempo atrás, surgiu o Polars.
00:00:51Ele sempre foi mais rápido que o Pandas.
00:00:53Já vamos falar sobre isso.
00:00:54Agora, com esta grande atualização 2.0, ele pode estar ficando cada vez mais perto de uma adoção maior.
00:01:00Já que você teve essa breve contextualização, o Polars discretamente mantinha dois motores há algum tempo.
00:01:05O que a maioria das pessoas usava era o motor em memória.
00:01:08Você pode pensar nele como um armazém.
00:01:10Ele carrega todo o seu conjunto de dados no chão do armazém e executa cada etapa da consulta por todo o espaço.
00:01:17E isso é extremamente rápido.
00:01:19Desde que tudo caiba na RAM.
00:01:21O motor de streaming funciona de forma diferente.
00:01:23Em vez de um único espaço gigante, ele é mais como uma linha de montagem.
00:01:27O Polars corta os dados em pequenos pedaços que os mantenedores chamam de Marcels.
00:01:32Esses pedaços são dimensionados para caber no cache da sua CPU.
00:01:36Aí eles são empurrados através do plano de consulta.
00:01:39Agora, diferentes partes da consulta podem continuar avançando em vez de esperar por todo o conjunto de dados.
00:01:43É daí que vem a velocidade.
00:01:44E, no fim das contas, é também o caminho para trabalhar com dados maiores que a sua memória.
00:01:49Mas há um porém.
00:01:50Se você tem oito operários em uma linha de montagem, eles não terminam necessariamente na mesma ordem em que começaram.
00:01:56E o mesmo vale para o Polars.
00:01:58Então, na 2.0, joins, group bys, unpivots... a documentação diz literalmente "etc."
00:02:04Não garantem mais a ordem das linhas.
00:02:06A menos que você peça isso explicitamente.
00:02:08Se você gosta de ferramentas de código para agilizar seu trabalho, não deixe de se inscrever.
00:02:11Temos vídeos novos o tempo todo.
00:02:13Certo, então é assim que isso se parece na prática.
00:02:15Eu vou rodar uv pip install --pre polars.
00:02:18E lembre-se dessa flag --pre.
00:02:20Nós vamos voltar a ela em um segundo.
00:02:22Beleza.
00:02:22Tenho aqui um LazyFrame com as chaves 2, 1, 0.
00:02:27Faço um left join com outro frame e depois dou um collect.
00:02:32E olhe só o resultado.
00:02:34Mesmo código do Polars 1.
00:02:35A ordem não é mais garantida.
00:02:37É o mesmo código, só que agindo diferente.
00:02:39Agora adiciono maintain_order="left" ao join.
00:02:43Posso executar novamente.
00:02:44Vou rodar aqui de novo.
00:02:45E a ordem original está de volta.
00:02:47Então, não é que o Polars esteja embaralhando nossos dados ao acaso.
00:02:51É o Polars dizendo: se a ordem importa, avise.
00:02:54Você realmente precisa especificar.
00:02:56E há outro detalhe bacana aqui.
00:02:58Rode a função explain em uma consulta.
00:03:01Ela não esconde o comportamento.
00:03:03Você só precisa saber onde procurar.
00:03:05Essa é a grande mudança de comportamento.
00:03:06Mas a 2.0 é curiosa porque não é exatamente um lançamento de recursos.
00:03:10É, na verdade, apenas uma faxina.
00:03:12E há uma boa quantidade de coisas sendo limpas aqui.
00:03:15Originalmente herdado do Pandas, tínhamos read_csv, que agora é só scan_csv com collect por baixo.
00:03:22O método profile de LazyFrame sumiu.
00:03:25Melt agora se torna unpivot.
00:03:28join_nulls vira nulls_equal.
00:03:30A conversão direta de inteiro para categorical foi removida.
00:03:35Você pode usar cat2 agora para ajudar com isso.
00:03:38A conversão direta de string para data foi removida.
00:03:41Usava-se string para date.
00:03:43Ao somar inteiros com sinal e sem sinal de 64 bits, o Polars agora entrega int128 em vez de converter em float e perder precisão em silêncio.
00:03:53E tem ainda mais chegando.
00:03:55Você pode usar o concat.
00:03:57Que agora recusa alturas incompatíveis em vez de tentar adivinhar o que você queria dizer.
00:04:02Essa é uma escolha bem inteligente por parte do Polars.
00:04:05Cada item removido gera um erro do tipo AttributeRemovedError.
00:04:09Ele próprio avisa qual método substituiu o antigo.
00:04:12Chame o melt, e o erro diz literalmente para usar unpivot com index e on.
00:04:17Todos esses erros se tornam praticamente um guia de como realmente usá-lo.
00:04:20Rode o código, quebre algo, corrija exatamente esse ponto com base no erro e continue em frente.
00:04:26E isso nos leva ao motivo pelo qual o Polars virou a ferramenta diária de tanta gente.
00:04:31O Pandas joga muitos problemas para o tempo de execução.
00:04:35O Polars tenta pegá-los cedo por meio de tudo isso.
00:04:37Você pode chamar collect_schema e descobrir que os tipos estão errados antes do Polars ler uma única linha.
00:04:44Ele apenas se antecipa ao que está por vir.
00:04:47E está ficando cada vez mais eficiente.
00:04:48Afinal, onde o Polars se encaixa?
00:04:50Bom, o DuckDB é focado em SQL.
00:04:53O Polars é uma API de expressões feita para Python.
00:04:56Também existem o Dask e o Spark.
00:04:58Eles são distribuídos.
00:04:59O Polars é focado em uma única máquina.
00:05:01A biblioteca em si é de código aberto.
00:05:04A nuvem do Polars não é.
00:05:05E esse detalhe muda as coisas quando chegamos ao desempenho.
00:05:09Agora, esse anúncio diz que o novo motor de streaming é facilmente cinco vezes mais rápido.
00:05:13Eu mexi com o Polars ao longo dos anos e sim, ele é mais rápido que o Pandas, mas nunca tive ganhos absurdos como cinco vezes mais rápido.
00:05:21Experimente em conjuntos de dados maiores.
00:05:23Com certeza você verá uma diferença na velocidade.
00:05:25Vai variar a cada execução e com cada conjunto de dados, mas você vai sentir a diferença e vê-la no tempo de execução.
00:05:30E esta é provavelmente a distinção mais importante de todo o lançamento.
00:05:34A parte que permitiria ao motor transbordar para o disco, execução de fato fora da memória, ainda não chegou.
00:05:40Portanto, hoje, streaming significa processamento em blocos e em paralelo.
00:05:43Ainda não significa que seu conjunto de dados possa ser magicamente maior que a RAM.
00:05:46A estimativa de 5x é uma expectativa do próprio Polars.
00:05:50Não há uma tabela de testes comparativos em lugar nenhum da postagem.
00:05:53E honestamente, a maioria das pessoas parece achar isso tranquilo.
00:05:55Muitos usuários pareceram felizes com um lançamento útil, embora sem grandes alardes.
00:05:59Não há um pacote enorme de recursos.
00:06:01Você não precisa aprender nada novo.
00:06:02Aqueles erros, conforme você programa, vão te dizer exatamente o que substituir.
00:06:07Apenas correções, faxina e o versionamento semântico usado da forma como deveria ser.
00:06:12Mas duas reclamações continuam aparecendo com frequência.
00:06:14A primeira é a ordem das linhas.
00:06:15Se maintain_order vem como falso por padrão, você pode criar bugs bem desagradáveis no código.
00:06:19Porque nada quebra.
00:06:21Seus números ainda podem estar completamente corretos.
00:06:23Eles só estão vinculados a linhas em uma ordem diferente.
00:06:26Isso é muito mais difícil de notar do que uma exceção.
00:06:29A segunda reclamação foi a palavra streaming aqui.
00:06:32Alegaram que é confuso para um motor que ainda não é verdadeiramente fora da memória.
00:06:38E há também os bugs de candidato a lançamento.
00:06:41Desde que a versão RC saiu, surgiu um problema de alta prioridade onde
00:06:44o group_by_dynamic lança um erro de data/hora fora do intervalo no motor de streaming.
00:06:49Chame o método limit.
00:06:51Bom, o limit não está encerrando cedo após um join.
00:06:54E string para datetime pode retornar nulo onde antes costumava lançar erros.
00:06:58É por isso que eu disse para guardar o comando de instalação com --pre.
00:07:02Versão pré 2.0.
00:07:04Esta ainda é uma versão candidata a lançamento.
00:07:06E agora, ela se comporta como tal.
00:07:08O que é normal.
00:07:09Certo?
00:07:09Ainda não é a versão final.
00:07:11Mais uma coisa.
00:07:12A crate em Rust ainda está na versão 0.55.
00:07:15Então, se você usa o Polars pelo Rust, ainda não existe o Polars 2.0 para você.
00:07:19Mas vou presumir que a maioria de nós deve estar apenas usando Python aqui.
00:07:24E aí, vale a pena atualizar?
00:07:25Bom, para um projeto novo, sim, eu atualizaria.
00:07:27Certo?
00:07:27Estamos nos adaptando a novas tecnologias, novas atualizações.
00:07:30Se o seu fluxo já usa sink_parquet ou sink_csv, você na prática já esteve usando
00:07:34o streaming durante todo esse tempo de qualquer forma.
00:07:36Mas há alguns casos em que eu esperaria um pouco.
00:07:39Entende?
00:07:39Se o seu código depende da ordem das linhas, não atualize apenas torcendo pelo melhor.
00:07:43Faça uma busca nos group bys que não têm um ordenamento em seguida.
00:07:47Se estiver usando group_by_dynamic, eu esperaria tudo isso se estabilizar.
00:07:51E quero dizer, é legal ver para onde isso muito provavelmente está indo.
00:07:54Isso provavelmente vai ser a 2.0, mas ainda não é o lançamento oficial.
00:07:57Dá para ir se habituando, mas ainda não chegou lá.
00:08:00O ponto em que sempre penso é no quão incomum este lançamento parece.
00:08:03O Polars 2.0 vem sem nenhum recurso novo.
00:08:07E ainda assim muda o comportamento do seu código existente.
00:08:10O novo motor é mais rápido na minha máquina, só não cinco vezes mais rápido.
00:08:14Então a 2.0 não é empolgante por adicionar um monte de novidades.
00:08:18É empolgante porque o Polars está usando uma grande mudança de versão para realmente limpar a base
00:08:24por baixo de tudo o que nós já estamos usando.
00:08:26Eu sou o Josh da BetterStack.
00:08:28Se você gosta de dicas e truques de programação como este, inscreva-se no canal.
00:08:30A gente se vê em outro vídeo.
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기