Apache Spark

O Apache Spark é um mecanismo para executar engenharia de dados, ciência de dados e aprendizado de máquina em máquinas de nó único ou clusters. Spark provê uma interface para programação de clusters com paralelismo e tolerância a falhas.

Características principais:

  • Dados em lote/transmissão: Unifica o processamento dos dados em lotes e transmissão em tempo real, utilizando: Python, SQL, Scala, Java ou R.

  • Análise SQL: Executa consultas ANSI SQL rápidas e distribuídas para criação de dashboards e relatórios.

  • Ciência de dados em escala: Realiza Análise Exploratória de Dados (EDA) em dados em escala de petabytes sem precisar recorrer à amostragem.

  • Aprendizado de Máquina: Treinar algoritmos de aprendizado de máquina em um laptop e usar o mesmo código para escalar para clusters tolerantes a falhas com milhares de máquinas.

Dependências

[1] Apache Spark 3.5.1
[2] Python

Instalação e Uso

Python

  • Using Python

$ pip install pyspark
$ pyspark
  • Using Docker

$ docker run -it --rm spark:python3 /opt/spark/bin/pyspark

QuickStart

df = spark.read.json("logs.json")
df.where("age > 21").select("name.first").show()

Machine Learning

# Every record contains a label and feature vector
df = spark.createDataFrame(data, ["label", "features"])

# Split the data into train/test datasets
train_df, test_df = df.randomSplit([.80, .20], seed=42)

# Set hyperparameters for the algorithm
rf = RandomForestRegressor(numTrees=100)

# Fit the model to the training data
model = rf.fit(train_df)

# Generate predictions on the test dataset.
model.transform(test_df).show()

Analytics e Data Science

df = spark.read.csv("accounts.csv", header=True)

# Select subset of features and filter for balance > 0
filtered_df = df.select("AccountBalance", "CountOfDependents").filter("AccountBalance > 0")

# Generate summary statistics
filtered_df.summary().show()

SQL

$ docker run -it --rm spark /opt/spark/bin/spark-sql
spark-sql>

QuickStart

SELECT
    name.first AS first_name,
    name.last AS last_name,
    age
FROM json.`logs.json`
WHERE age > 21;