Pular para o conteúdo

Automatize a conversão de CSV para Parquet com Buckets, Webhooks e Jobs do Hugging Face

Ver no idioma original →

Autoria: Hugging Face · Assistir no YouTube

Vídeo de autoria do canal indicado, não da IANIA; todos os direitos pertencem ao criador. Transcrição, resumo e tradução gerados automaticamente; o conteúdo no idioma original é preservado na versão em idioma original.

Idioma original: inglês

Vídeo original: Automate CSV to Parquet with Hugging Face Buckets, Webhooks & Jobs · Canal: Hugging Face · 04:50 · Assistir no YouTube

Tópicos: Automação de tarefas e workflows, Dados, bancos de dados e embeddings, Infraestrutura e hardware de IA

O vídeo mostra como automatizar a conversão de arquivos CSV em arquivos Parquet usando buckets, webhooks e jobs do Hugging Face. Um bucket de entrada recebe os arquivos, e um webhook aciona um job que executa um script para processá-los e gravar o resultado em outro bucket. A demonstração cria um arquivo de teste, sincroniza-o com o bucket e verifica o status e os logs do job. O processo é executado na nuvem, sem precisar baixar e reenviar os arquivos manualmente.

  • Buckets são úteis para armazenar arquivos que chegam ao longo do tempo, como logs e conjuntos de dados.
  • O fluxo usa um bucket de entrada e outro de saída para separar os arquivos originais dos processados.
  • Um webhook monitora o bucket de entrada e aciona um job quando um novo arquivo aparece.
  • O job executa o script optimize-parquet.py para converter um arquivo CSV em Parquet otimizado.
  • O comando hf buckets sync envia arquivos para o bucket, usando deduplicação por meio do Xet.
  • O status do job pode ser consultado com hf jobs ps -a, e seus logs com hf jobs logs.
  • O comando hf buckets ls -R permite verificar recursivamente os arquivos no bucket de saída.
Início Capítulo Resumo
00:00 Visão geral do fluxo O vídeo apresenta a automação que recebe um CSV em um bucket, aciona um job por webhook e produz um arquivo Parquet.
01:01 Buckets de entrada e saída A demonstração escolhe os buckets de entrada e saída e explica como criar um bucket privado.
02:07 Configuração do job e do webhook O job fornece um ID que é usado para configurar um webhook que monitora o bucket de entrada.
03:13 Envio do arquivo de teste Um CSV de teste é criado e sincronizado com o bucket para acionar o webhook e o job.
04:19 Verificação do resultado Os logs e o bucket de saída confirmam que o arquivo Parquet foi criado.

Vamos pegar um novo arquivo CSV, colocá-lo em um bucket, observar um webhook, passá-lo para um job e criar um arquivo Parquet. — 00:00

Tudo pode ser feito na nuvem, sem precisar baixar e enviar esses arquivos grandes de um lado para o outro. — 00:30

Um webhook permite observar alterações em um repositório ou bucket específico. — 02:07

O job que acabamos de executar terminou com o status de concluído. — 03:48

  • Hugging Face (empresa): Plataforma usada para armazenar arquivos em buckets e executar jobs e webhooks na nuvem.
  • Buckets (conceito): Armazenamentos de arquivos usados como origem e destino no fluxo de processamento.
  • Webhooks (conceito): Mecanismo que observa alterações em um bucket e pode acionar um job quando chega um arquivo.
  • Jobs (conceito): Tarefas executadas na plataforma para processar arquivos por meio de um script.
  • Xet (ferramenta): Tecnologia mencionada na demonstração como responsável pela deduplicação durante a sincronização.
  • CSV (conceito): Formato do arquivo de entrada usado na demonstração.
  • Parquet (conceito): Formato do arquivo otimizado gerado pelo job a partir do CSV.
  • optimize-parquet.py (ferramenta): Script usado pelo job para converter o arquivo CSV em um arquivo Parquet otimizado.

00:00 Olá, pessoal! No Quick Hug de hoje, vamos usar webhooks, buckets e jobs. Vamos pegar um novo arquivo CSV, colocá-lo em um bucket, monitorar um webhook, capturar o arquivo, passá-lo para um job e criar um arquivo Parquet. Vamos começar. Buckets são úteis para arquivos que chegam ao longo do tempo, como logs, digitalizações e novos arquivos de dados. Depois que esses arquivos de dados estiverem no bucket, você vai querer convertê-los, limpá-los e realizar tarefas de engenharia de dados. Webhooks e jobs podem automatizar tudo isso para você.

00:30 O melhor é que tudo pode ser feito na nuvem, sem precisar baixar e enviar esses arquivos grandes de um lado para o outro. Vamos precisar de dois buckets para isso funcionar. O primeiro é onde os arquivos vão parar inicialmente, dentro de um bucket de armazenamento do Hugging Face. À medida que os processamos, precisamos de um segundo bucket para receber os arquivos processados. Vamos dar uma olhada nos buckets que tenho atualmente. Para ver quais buckets já estão associados à sua conta, execute hf buckets

01:01 ls. Se eu fizer isso, você verá que tenho três buckets. Nesta demonstração, vamos usar os dados de táxi de Nova York como bucket de entrada e o bucket NYC taxi parquet como bucket de saída. Lembre-se: estamos convertendo um arquivo CSV em um arquivo Parquet. Criar um bucket é muito fácil. O que você faz é executar hf buckets create e informar o local do bucket. Claro, coloque seu nome de usuário na frente. E, só para mostrar como criei o bucket Parquet: fizemos assim e, em seguida, adicionei a opção private para que ele ficasse privado apenas para

01:35 mim. Se você não incluir essa opção private, o bucket será público. Precisamos criar um job que o webhook possa chamar quando um novo arquivo aparecer no bucket. O que tenho aqui na tela é a definição de um job que usa este script específico, chamado optimize-parquet.py, para pegar um arquivo CSV e criar um arquivo Parquet otimizado a partir dele. Quando você executa um job no Hugging Face Hub, normalmente ele é executado uma vez e faz o que o script foi programado para fazer.

02:07 Neste caso, este script específico procura um ID de webhook para executar algum processo. Mas, como ainda não criamos um webhook, ele não faz nada quando executamos este comando. Agora vamos falar sobre webhooks. Um webhook permite monitorar alterações em um repo ou bucket específico que pertença a um usuário ou organização específicos — não apenas aos seus, mas aos de qualquer pessoa. No Hugging Face. Quando executamos o job, ele nos forneceu um ID de job e, de fato, foi executado, mas não há

02:40 webhook, então nada aconteceu de verdade. Mas precisamos deste ID de job aqui. Vamos copiá-lo e usá-lo na próxima etapa para criar o webhook. Certo, vou colocar o ID de job em uma variável de ambiente que usaremos para criar o webhook. Aqui está o ID de job, e aqui está o comando para o meu webhook. Digito hf webhooks create. Aqui está o ID de job. Monitore novamente este bucket. Este é o nosso bucket de entrada, NYC taxi data, e então digo para usar o token do Hugging Face do usuário conectado no momento.

03:13 Agora, se eu executar isso, aparecerá uma confirmação: pronto, agora temos um webhook criado. Certo, vamos criar um novo arquivo de teste dentro do nosso bucket. Vou pegar as primeiras dez mil linhas do nosso arquivo de dados original e criar um novo arquivo chamado trip-data-new.csv. Isso vai criá-lo. Aqui está o nosso arquivo. Agora vamos sincronizá-lo. Usando hf buckets sync, este diretório, hf colon slash slash buckets, meu nome de usuário e, em seguida, o bucket propriamente dito, NYC taxi data.

03:48 Isso vai ser bem rápido, porque usa Xet nos bastidores para eliminar duplicatas. Agora que o arquivo está lá, devemos conseguir ver como isso está sendo executado com o nosso webhook e job. Certo, a execução do nosso job terminou. Vamos verificar o status. Vamos executar hf jobs ps -a e veremos que o job que acabamos de executar terminou com o status completed e levou cerca de oito segundos. Agora podemos ver a saída desse job, se quisermos. Podemos executar hf jobs

04:19 logs e, em seguida, informar o ID desse job específico. Você verá aqui a saída, e a mensagem foi: Wrote buckets/prpatel/nyc-taxi-parquet/trip-data-new.csv. Agora, se quisermos, também podemos verificar o que há de fato nesse bucket. Podemos executar hf buckets ls prpatel/nyc-taxi-parquet.

04:50 E, mais uma vez, este é o bucket de saída para o qual estávamos gravando. Então, vamos executar isso e adicionar -R para fazer a busca recursivamente. E aqui está. Aqui está o nosso trip-data-new e o arquivo Parquet que acabou de ser criado. Certo. É isso. Espero que tenham gostado do vídeo. Nos links, há um link para o meu repo, onde estão todas as minhas anotações e o código da demonstração, e também vou incluir um link para o tutorial completo sobre como usar webhooks, para que você possa começar a experimentar isso por conta própria.

Transcrição original

[00:00] Hey everyone! In today’s Quick Hug, what we’re going to do is use webhooks, buckets, and jobs. We’re going to take a new CSV file, put it into a bucket, watch a webhook, pick it up, give it to a job, and create a Parquet file. Let’s get going. Buckets are good for files that arrive over time, things like logs, scans, new data files. Once you have these data files in the bucket, you’ll want to convert them, clean them, and do data engineering tasks. Webhooks and jobs can automate all this for you.

[00:30] The best part is, it can all be done on the cloud, without having to download and upload these large files back and forth. We’re going to need two buckets for this to work. The first one is where the files initially end up inside of a Hugging Face storage bucket. As we process them, we need a second bucket for those processed files to land into. Let’s have a look at the buckets that I currently have. To see what buckets you already have associated with your account, you do hf buckets

[01:01] ls. If I do that, you’ll see I have three buckets. For this demo, we’re going to use NYC taxi data as our input bucket and NYC taxi parquet as our output bucket. Remember, we’re converting a CSV file into a parquet file. To create a bucket is super easy. What you do is hf buckets create the location of the bucket. Of course, put your username in front of it. And just to show you how I created the parquet bucket. We did it like this, and then I added the private flag so that it’s only private to

[01:35] me. If you leave that private flag out, the bucket will be public. We need to create a job that the webhook can call when a new file appears in the bucket. What I have here on the screen is the definition of a job that uses this specific script, which is optimize-parquet.py, to go and take a CSV file and create an optimized Parquet file with it. When you typically run a job on Hugging Face Hub, it will run once and do whatever the script is supposed to do.

[02:07] In this case, this specific script looks for a webhook ID so that it will go do some process. But because we haven’t created a webhook yet, it doesn’t actually do anything when we run this command. Now let’s talk about webhooks. A webhook allows you to listen for changes on a specific repository or bucket that belongs to a specific user or organization—not just your own, but anyone. That’s on Hugging Face. When we ran the job, it gave us a job ID and it actually did run, but there’s no

[02:40] webhook, so nothing actually happened. But what we need is this job ID right here. So we’re going to take that and we’re going to copy it and use it in the next step to create the webhook. Okay, so what I’m going to do is put the job ID into an environment variable that we’re going to use in creating the webhook. So there’s a job ID and here’s the command for my webhook. I say hf webhooks create. There’s a job ID. Watch this bucket again. This is our input bucket NYC taxi data, and then I say use the current logged

[03:13] in user’s Hugging Face token. Now if I go run that, that will say voila, we have a webhook now created. All right, so let’s create a new test file inside of our bucket. I’m going to just grab the first ten thousand rows of our original data file and create a new file called trip-data-new.csv. Oh, that will go and create that. You’ll see here’s our file. Now let’s sync that. Using hf buckets sync, this directory, hf colon slash slash buckets my username and then the actual bucket NYC taxi data.

[03:48] Now this will run pretty quickly because it’s using Xet underneath the hood to do deduplication. And now that’s there, now we should be able to see how this is running with our webhook and job. Okay, our job is finished running. Let’s go check on its status. We’ll do hf jobs ps -a, and then we’ll see that the job that we just ran finished with the status of completed, and it took about eight seconds. Now we can go look at the output of that job if we wanted to. We can do hf jobs

[04:19] logs, and then put in the ID of that specific job, and then you’ll see that here is the output, and the message was Wrote buckets/prpatel/nyc-taxi-parquet/trip-data-new.csv. Now, if we wanted to, we could also go and look to see what is actually in that bucket. So we could do hf buckets ls prpatel/nyc-taxi-parquet.

[04:50] And again, this is the output bucket that we were writing to. So let’s go run that, and we’ll put the -R on it to do recursive. And here we are. Here’s our trip-data-new and our Parquet file that was just created. All right. So that’s it. I hope you enjoyed that video. If you look in the links, I have a link to my repository where all my notes and demo code are, and I’ll also include a link to the full tutorial on using webhooks, so that you can start experimenting with this on your own.