Para este post, vamos criar exemplos de como converter tabelas parquet em Delta table. Primeiro, criaremos uma tabela parquet do zero por meio de um Spark Dataframe e depois a converteremos em um Delta Table.
O uso de Delta Table fornece benefícios em comparação com uma tabela em Parquet. O Delta permite restaurar versões de sua tabela por meio da função Time Travel, suporta transações ACID e várias outras features interessantes.
Criando Tabela Parquet
Em primeiro lugar, vamos criar uma tabela parquet para ser convertida posteriormente em uma Delta Table. Vamos criar uma tabela Parquet do início para um melhor entendimento.
O código Java e Spark a seguir, será executado uma vez, apenas para criar uma tabela parquet. Vamos usar um Spark Dataframe que será carregado de um arquivo JSON contendo registros semi-estruturados.
public static void main(String[] args){
SparkConf conf = new SparkConf();
conf.setAppName("spark-delta-table");
conf.setMaster("local[1]");
SparkSession session = SparkSession.builder()
.config(conf)
.getOrCreate();
Dataset<Row> dataFrame = session.read().json("product.json");
dataframe.write().format("parquet").save("table/product");
}
No exemplo acima, começamos a criar um objeto SparkSession para criar e gerenciar um Spark Dataframe que foi carregado a partir do conteúdo do arquivo product.json.
Após a carga, o Dataframe cria (ou escreve) uma tabela em formato parquet no diretório table/product.
Conteúdo JSON
Conteúdo representado pelo arquivo product.json que contém registros semi-estruturados.
{"id":1, "name":"rice", "price":12.0, "qty": 2}
{"id":2, "name":"beans", "price":7.50, "qty": 5}
{"id":3, "name":"coke", "price":5.50, "qty": 2}
{"id":4, "name":"juice", "price":3.80, "qty": 1}
{"id":5, "name":"meat", "price":1.50, "qty": 1}
{"id":6, "name":"ice-cream", "price":6.0, "qty": 2}
{"id":7, "name":"potato", "price":3.70, "qty": 10}
{"id":8, "name":"apple", "price":5.60, "qty": 5}
Após executar o código acima, os arquivos parquets serão gerados no diretório table/product contendo o arquivo abaixo.
Convertendo tabela Parquet em Delta Table
Agora que temos uma tabela Parquet já criada, podemos converter facilmente para Delta Table, veja o código a seguir.
public static void main(String[] args){
SparkConf conf = new SparkConf();
conf.setAppName("spark-delta-table");
conf.setMaster("local[1]");
SparkSession session = SparkSession.builder()
.config(conf)
.getOrCreate();
DeltaTable.convertToDelta(session, "parquet.`table/product`");
}
O método DeltaTable.convertToDelta é responsável por converter a tabela parquet em Delta Table. Observe que tivemos que usar SparkSession como parâmetro e também especificar o caminho da tabela parquet usando este formato"parquet.`<path>`" .
O resultado após a execução você pode ver na imagem abaixo.
Após a execução da conversão, Delta cria o famoso diretório _delta_log contendo informações de commit e arquivos de checkpoint.
Material de estudo
Se quer aprender mais sobre o assunto e alcançar um alto nível de conhecimento, recomendo fortemente a leitura do(s) seguinte(s) livro(s):
Spark: The Definitive Guide: Big Data Processing Made Simple (Versão Inglês) é uma referência completa para quem quer aprender o Spark e sobre as suas principais funcionalidades. Lendo esse livro, você vai aprender sobre DataFrames, Spark SQL através de exemplos práticos. O autor mergulha nas APIs de baixo nível do Spark, RDDs e também sobre como o Spark é executado em um cluster e como depurar e monitorar os aplicativos de clusters do Spark. Os exemplos práticos estão em Scala e Python.
Beginning Apache Spark 3: With Dataframe, Spark SQL, Structured Streaming, and Spark Machine Library (Versão Inglês) com a nova versão do Spark, este livro explora os principais recursos do Spark, como o uso de Dataframes, Spark SQL no qual você pode usar SQL para manipular dados e Structured Streaming para processar dados em tempo real. Este livro contém exemplos práticos e trechos de código para facilitar a leitura.
High Performance Spark: Best Practices for Scaling and Optimizing Apache Spark (Versão Inglês) é um livro que explora as melhores práticas usando a linguagem Spark e Scala para lidar com aplicações de dados em larga escala, técnicas para transformações utilizando RDD, e também mostra como as novas interfaces do Spark SQL melhoram o desempenho sobre a estrutura de dados RDD do SQL, exemplos de Spark MLlib e o uso de bibliotecas de aprendizado de máquina de ML e muito mais.
Python Crash Course, 2nd Edition: A Hands-On, Project-Based Introduction to Programming (Versão Inglês)
abrange os conceitos básicos do Python por meio de exemplos interativos e práticas recomendadas.
Learning Scala: Practical Functional Programming for the Jvm (Versão Inglês) é um excelente livro que aborda a linguagem Scala através de exemplos e exercícios práticos. Lendo este livro, você aprenderá sobre os principais tipos de dados, literais, valores e variáveis. Construir classes que compõem uma ou mais características para total reutilização, criar novas funcionalidades misturando-as na instanciação e muito mais. Scala é uma das principais linguagens em projetos de Big Data em todo o mundo, com grande uso em grandes empresas de tecnologia como o Twitter e também a linguagem principal do Spark.
Bom é isso, espero que tenham gostado!
Comments