Rode localmente, de ponta a ponta
Esta página parte de uma máquina sem nada instalado e termina com um pipeline que você construiu no canvas, executado contra o Spark real, exibindo seu resultado. Ela amarra as páginas de instalação e de execução de um Job num único caminho ordenado — siga-o de cima a baixo na primeira vez.
As peças que você instala:
- Java (JDK 17) — o Spark roda na JVM.
- Python + Sparquet + PySpark — o framework e seu motor.
- Os shims Hadoop — apenas no Windows, e o motivo isolado mais comum de uma primeira execução travar.
- Sparquet Studio — o app de navegador onde você desenha.
- O runner local — o pequeno serviço que permite ao Studio executar contra o seu Spark.
1. Java (JDK 17)
Seção intitulada “1. Java (JDK 17)”O Spark precisa de um JDK e de JAVA_HOME apontando para ele. O JDK 17 funciona tanto para o Spark 3.5 quanto para o Spark 4 (o Java 11 também funciona para o Spark 3.x).
brew install openjdk@17export JAVA_HOME="$(/usr/libexec/java_home -v 17)"sudo apt-get install -y openjdk-17-jdk # Debian/Ubuntuexport JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64Instale o Temurin 17 (Adoptium) ou outro OpenJDK 17, depois defina JAVA_HOME:
setx JAVA_HOME "C:\Program Files\Eclipse Adoptium\jdk-17"Abra um novo terminal para que a variável tenha efeito.
Verifique — a versão deve ser 17 e JAVA_HOME deve estar definida:
java -versionecho $JAVA_HOME # PowerShell: echo $env:JAVA_HOME2. Python, Sparquet e PySpark
Seção intitulada “2. Python, Sparquet e PySpark”O Sparquet precisa de Python 3.9+; o PySpark vem junto como dependência. Use um ambiente virtual para que a instalação fique isolada.
python3 -m venv .venvsource .venv/bin/activatepip install sparquet pysparkpython -m venv .venv.\.venv\Scripts\Activate.ps1pip install sparquet pysparkgit clone https://github.com/VictorPasqualini/sparquet.gitcd sparquetpip install -e . pysparkPara tabelas Delta Lake fora do Databricks, adicione o extra: pip install "sparquet[delta]".
Verifique se o import resolve:
from sparquet import Sparquetprint(Sparquet)3. Somente Windows — os shims Hadoop
Seção intitulada “3. Somente Windows — os shims Hadoop”-
Baixe
winutils.exeehadoop.dllcorrespondentes à sua versão do Hadoop (a que o PySpark empacotou). -
Coloque ambos em
C:\hadoop\bin. -
Defina
HADOOP_HOMEe adicione seubinaoPATH:Terminal window setx HADOOP_HOME "C:\hadoop"setx PATH "$env:PATH;C:\hadoop\bin" -
Abra um novo terminal para que as variáveis passem a valer.
WSL2 ou Docker contorna isso por completo — dentro de um ambiente Linux não há nada extra a instalar.
4. Confirme que o Spark funciona
Seção intitulada “4. Confirme que o Spark funciona”Antes de conectar o Studio, prove o runtime de ponta a ponta. Crie um CSV de uma linha para ler:
printf 'id,amount\n1,10\n2,20\n' > orders.csvSalve este pipeline como hello.json:
{ "name": "hello_local", "input": { "format": "csv", "path": "orders.csv" }, "transformations": [ { "type": "filter", "condition": "amount > 0" } ], "output": { "format": "csv", "path": "./out/hello", "mode": "overwrite" }}Rode-o pela CLI:
python -m sparquet.cli hello.jsonSe ele imprimir um resultado estruturado terminando numa contagem de linhas gravadas e
deixar arquivos part sob ./out/hello, sua configuração de Java + PySpark + (no Windows)
Hadoop está correta e o runner do Studio também vai funcionar.
5. Sparquet Studio
Seção intitulada “5. Sparquet Studio”O Studio é um app de navegador estático; desenhar não precisa de servidor.
-
Clone e instale:
Terminal window git clone https://github.com/VictorPasqualini/sparquet.gitcd sparquet/sparquet-studionpm install -
Inicie o servidor de desenvolvimento:
Terminal window npm run dev -
Abra http://localhost:5273. O primeiro lançamento semeia um Workflow Getting Started com Jobs funcionais.
Node.js 18.18+ é necessário apenas para este passo.
6. O runner local
Seção intitulada “6. O runner local”Desenhar funciona offline. Executar a partir do canvas precisa do Spark, então o Studio conversa com um pequeno serviço FastAPI que você mesmo roda contra o mesmo ambiente Python do passo 2.
-
Instale suas dependências:
Terminal window cd sparquet-studiopip install -r server/requirements.txt -
Inicie-o a partir do diretório
sparquet-studio— o módulo insere a raiz do repositório nosys.path, entãosparquetresolve mesmo sem instalar o pacote:Terminal window uvicorn server.main:app --port 8787Ele faz bind em
127.0.0.1por padrão. Mantenha-o ali — nunca o exponha a uma rede. -
Copie o token que ele imprime na inicialização:
========================================================================Sparquet Studio runner token (this session only):S3yhI-6191J6wu2xz7bCX9YpafB0GOLo======================================================================== -
Cole-o em Settings → Local runner → Runner token no Studio (ou no card que o painel Run mostra na primeira vez que uma execução é recusada).
O token muda a cada reinício. Para fixá-lo, defina SPARQUET_STUDIO_TOKEN antes de iniciar:
SPARQUET_STUDIO_TOKEN=my-local-token uvicorn server.main:app --port 8787$env:SPARQUET_STUDIO_TOKEN = "my-local-token"; uvicorn server.main:app --port 8787A mesma regra do Windows se aplica ao runner: sem winutils.exe e HADOOP_HOME (passo 3), um /run nunca termina. GET /health reporta spark_available apenas com base no import, então pode dar ok numa máquina onde uma execução real ainda não consegue gravar arquivos.
7. Construa e rode um pipeline
Seção intitulada “7. Construa e rode um pipeline”- No Studio, arraste um node input para o canvas e aponte-o para uma fonte que você consiga ler localmente — um path CSV ou Parquet, por exemplo.
- Adicione uma transformação ou duas (um
filter, umwith_column), depois um node output gravando em algum lugar local. - Abra o painel Run com Ctrl/⌘+Enter.
- Pressione Run pipeline. O Studio compila o canvas para o mesmo JSON que o framework roda, e o envia via POST ao runner.
8. Leia o resultado
Seção intitulada “8. Leia o resultado”O painel Run reporta tudo o que a execução produziu:
| Seção | O que ela diz |
|---|---|
| Status | success, skipped (um stop_if_empty disparou) ou error, com a mensagem |
| Métricas | linhas lidas, linhas gravadas, duração |
| Validações | uma linha por regra: passou, contagem de falhas, mensagem |
| Preview | até 50 linhas do DataFrame de saída |
| Logs | os registros estruturados do próprio framework para esta execução |
Uma execução pulada não é uma falha — o stop_if_empty a encerrou porque não havia nada a processar.
Próximos
Seção intitulada “Próximos”- O fluxo completo de execução, endpoints e solução de problemas: Executando um Job.
- Escreva um pipeline à mão: Seu primeiro pipeline.
- Para que cada node compila: a referência do pipeline.