Apache Spark é um mecanismo de análise unificado de código aberto para processamento de dados em larga escala. Ele fornece uma interface para programar clusters com paralelismo de dados implícito e tolerância a falhas. Originalmente desenvolvido no AMPLab da Universidade da Califórnia, Berkeley, a partir de 2009, o código-fonte do Spark foi doado à Apache Software Foundation em 2013, que o mantém desde então.
A base arquitetural do Spark é o conjunto de dados distribuído resiliente (RDD), um multiconjunto somente leitura de itens de dados distribuídos por um cluster de máquinas, mantido de forma tolerante a falhas. A API DataFrame foi lançada como uma abstração sobre o RDD, seguida pela API Dataset. No Spark 1.x, o RDD era a API principal, mas a partir do Spark 2.x, o uso da API Dataset é incentivado, embora a API RDD não esteja obsoleta. A tecnologia RDD ainda sustenta a API Dataset.
O Spark e seus RDDs foram desenvolvidos em 2012 em resposta às limitações do paradigma de computação em cluster MapReduce, que força uma estrutura de fluxo de dados linear em programas distribuídos. Os programas MapReduce leem dados de entrada do disco, mapeiam uma função sobre os dados, reduzem os resultados e armazenam os resultados da redução no disco. Os RDDs do Spark funcionam como um conjunto de trabalho para programas distribuídos, oferecendo uma forma deliberadamente restrita de memória compartilhada distribuída.
Dentro do Spark, o fluxo de trabalho é gerenciado como um grafo acíclico dirigido (DAG). Os nós representam RDDs, enquanto as arestas representam operações nos RDDs. O Spark facilita tanto algoritmos iterativos, que visitam seu conjunto de dados várias vezes em um loop, quanto análise de dados interativa ou exploratória, como consultas repetidas no estilo de banco de dados. A latência de tais aplicações pode ser reduzida em várias ordens de magnitude em comparação com implementações Apache Hadoop MapReduce. Entre os algoritmos iterativos estão os algoritmos de treinamento para sistemas de aprendizado de máquina, que formaram o ímpeto inicial para o desenvolvimento do Spark.
Spark Core
O Spark Core é a base do projeto como um todo. Ele fornece despacho de tarefas distribuídas, agendamento e funcionalidades básicas de E/S, expostos por meio de uma interface de programação de aplicações para Java, Python, Scala, .NET e R, centrada na abstração RDD. A API Java está disponível para outras linguagens JVM e algumas linguagens não-JVM que podem se conectar à JVM, como Julia. Essa interface reflete um modelo de programação funcional ou de ordem superior: um programa driver invoca operações paralelas como map, filter ou reduce em um RDD, passando uma função ao Spark, que agenda a execução da função em paralelo no cluster. Essas operações, e outras adicionais como joins, recebem RDDs como entrada e produzem novos RDDs. Os RDDs são imutáveis e suas operações são preguiçosas; a tolerância a falhas é alcançada mantendo-se o rastreamento da linhagem de cada RDD (a sequência de operações que o produziu) para que ele possa ser reconstruído em caso de perda de dados. Os RDDs podem conter qualquer tipo de objeto Python, .NET, Java ou Scala.
Além do estilo funcional orientado a RDD, o Spark fornece duas formas restritas de variáveis compartilhadas: variáveis de transmissão referenciam dados somente leitura necessários em todos os nós, enquanto acumuladores podem ser usados para programar reduções em um estilo imperativo.
Um exemplo típico de programação funcional centrada em RDD é um programa Scala que calcula frequências de palavras a partir de arquivos de texto e imprime as mais comuns. Cada map, flatMap e reduceByKey recebe uma função anônima que executa uma operação simples em um único item de dados (ou um par de itens) e a aplica para transformar um RDD em um novo RDD.
PySpark
PySpark é a API Python para Apache Spark, introduzida no Spark 0.7, lançado em fevereiro de 2013. Ela permite que aplicações Spark sejam escritas em Python e fornece um shell interativo para análise exploratória. O código PySpark é executado sob o runtime padrão CPython e pode chamar bibliotecas Python nativas como NumPy e SciPy; a comunicação entre o código de usuário Python e o núcleo baseado em JVM do Spark tem sido historicamente mediada pela biblioteca Py4J.
PySpark fornece interfaces Python para a maioria dos componentes do Spark, incluindo Spark Core, Spark SQL e a API DataFrame, Structured Streaming e MLlib; desde o Spark 4.1, também expõe a API Spark Declarative Pipelines. Uma API compatível com pandas, conhecida como pandas API on Spark, foi integrada ao PySpark no Apache Spark 3.2.0, lançado em outubro de 2021. Ela fornece equivalentes à API de análise de dados pandas que são executados contra o mecanismo Spark, permitindo que código no estilo pandas seja executado em dados distribuídos. O componente se originou como Koalas, um projeto separado de código aberto pela Databricks em 2019, que foi posteriormente incorporado ao PySpark. PySpark também fornece um cliente para Spark Connect, uma arquitetura cliente-servidor que permite conectividade remota a clusters Spark a partir de aplicações PySpark.
Um programa PySpark típico usa um SparkSession para carregar dados como um DataFrame e aplicar transformações.
Spark SQL
Spark SQL é um componente sobre o Spark Core que introduziu uma abstração de dados chamada DataFrames, que fornece suporte para dados estruturados e semiestruturados. Spark SQL fornece uma linguagem de domínio específico (DSL) para manipular DataFrames em Scala, Java, Python ou .NET. Também fornece suporte à linguagem SQL, com interfaces de linha de comando e servidor ODBC/JDBC. Embora os DataFrames careçam da verificação de tipos em tempo de compilação fornecida pelos RDDs, a partir do Spark 2.0, o Dataset fortemente tipado é totalmente suportado pelo Spark SQL também.
Spark Declarative Pipelines
Spark Declarative Pipelines (SDP) é um framework declarativo para definir e executar pipelines de dados de extração, transformação e carga (ETL), adicionado no Apache Spark 4.1.0, que foi lançado em 16 de dezembro de 2025. Os desenvolvedores declaram os conjuntos de dados que um pipeline processa e as transformações a serem aplicadas, permitindo que o mecanismo otimize a execução. Este framework visa simplificar o desenvolvimento e a manutenção de pipelines, reduzindo código boilerplate e permitindo melhores oportunidades de otimização.
Gerenciamento de Cluster e Armazenamento
O Spark requer um gerenciador de cluster e um sistema de armazenamento distribuído. Para gerenciamento de cluster, o Spark suporta Spark nativo autônomo, Hadoop YARN, Apache Mesos ou Kubernetes. Um cluster Spark nativo autônomo pode ser iniciado manualmente ou pelos scripts de inicialização fornecidos pelo pacote de instalação. Também é possível executar os daemons em uma única máquina para testes. Para armazenamento distribuído, o Spark pode interagir com uma ampla variedade de sistemas distribuídos, incluindo Alluxio, Hadoop Distributed File System (HDFS), MapR File System (MapR-FS), Cassandra, OpenStack Swift, Amazon S3, Kudu, Lustre file system ou uma solução personalizada. O Spark também suporta um modo local pseudo-distribuído, geralmente usado apenas para desenvolvimento ou testes, onde o armazenamento distribuído não é necessário e o sistema de arquivos local pode ser usado; em tal cenário, o Spark é executado em uma única máquina com um executor por núcleo de CPU.
A capacidade do Spark de lidar com cargas de trabalho em lote e em streaming, combinada com seu processamento em memória e APIs ricas, tornou-o uma escolha popular para processamento de dados em larga escala em indústrias que vão de finanças a computação em nuvem. Sua integração com Apache Kafka para dados em streaming e Apache Airflow para orquestração de fluxos de trabalho estende ainda mais sua utilidade em pipelines de dados modernos.