Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Apache Parquet é um formato de arquivo columnar otimizado para cargas de trabalho analíticas. Ele permite que os mecanismos de consulta leiam apenas as colunas necessárias e ignorem grupos de linhas irrelevantes. Parquet é o formato de armazenamento subjacente para Delta Lake(/delta/index.md), tornando-o o formato mais comum para dados armazenados em Azure Databricks. Azure Databricks dá suporte ao Parquet para leitura e gravação com o Apache Spark, incluindo especificação de esquema, particionamento e compactação de gravação.
Pré-requisitos
Azure Databricks não requer configuração adicional para usar arquivos Parquet. No entanto, para transmitir arquivos Parquet, você precisa do Carregador Automático.
Opções
Use os métodos .option() e .options() de DataFrameReader e DataFrameWriter para configurar fontes de dados Parquet. Para obter uma lista completa das opções com suporte, consulte DataFrameReader opções do Parquet e DataFrameWriter opções do Parquet.
Usage
Os exemplos a seguir usam o conjunto de dados de exemplo do Wanderbricks para demonstrar a leitura e gravação de arquivos Parquet usando a API do DataFrame do Spark e o SQL.
Ler arquivos Parquet usando SQL
Use read_files para consultar arquivos Parquet diretamente do armazenamento em nuvem usando SQL sem criar uma tabela.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_parquet',
format => 'parquet'
)
Ler e gravar arquivos Parquet
Os exemplos a seguir gravam as revisões do Wanderbricks no formato Parquet, as leem novamente em um DataFrame e demonstram o modo de substituição.
Python
# Write wanderbricks reviews to Parquet format
df = spark.read.table("samples.wanderbricks.reviews")
df.write.format("parquet").save("/Volumes/<catalog>/<schema>/<volume>/reviews_parquet")
# Read a Parquet file into a DataFrame
df = spark.read.format("parquet").load("/Volumes/<catalog>/<schema>/<volume>/reviews_parquet")
display(df)
# Write with overwrite mode
df.write.format("parquet").mode("overwrite").save("/Volumes/<catalog>/<schema>/<volume>/reviews_parquet")
Scala
// Write wanderbricks reviews to Parquet format
val reviews = spark.read.table("samples.wanderbricks.reviews")
reviews.write.format("parquet").save("/Volumes/<catalog>/<schema>/<volume>/reviews_parquet")
// Read a Parquet file into a DataFrame
val df = spark.read.format("parquet").load("/Volumes/<catalog>/<schema>/<volume>/reviews_parquet")
df.show()
// Write with overwrite mode
df.write.format("parquet").mode("overwrite").save("/Volumes/<catalog>/<schema>/<volume>/reviews_parquet")
SQL
-- Write wanderbricks reviews to Parquet format
CREATE TABLE reviews_parquet
USING PARQUET
AS SELECT * FROM samples.wanderbricks.reviews;
SELECT * FROM reviews_parquet;
Especificar um esquema
Especifique um esquema ao ler arquivos Parquet para evitar a sobrecarga da inferência de esquema. Por exemplo, defina um esquema com os campos review_id, rating e comment e leia reviews_parquet em um DataFrame.
Python
from pyspark.sql.types import StructType, StructField, StringType, IntegerType
schema = StructType([
StructField("review_id", StringType(), True),
StructField("rating", IntegerType(), True),
StructField("comment", StringType(), True)
])
df = spark.read.format("parquet").schema(schema).load("/Volumes/<catalog>/<schema>/<volume>/reviews_parquet")
df.printSchema()
df.show()
Scala
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType}
val schema = StructType(Array(
StructField("review_id", StringType, nullable = true),
StructField("rating", IntegerType, nullable = true),
StructField("comment", StringType, nullable = true)
))
val df = spark.read.format("parquet").schema(schema).load("/Volumes/<catalog>/<schema>/<volume>/reviews_parquet")
df.printSchema()
df.show()
SQL
-- Create a table with an explicit schema from Parquet files
CREATE TABLE reviews_parquet (
review_id STRING,
rating INT,
comment STRING
)
USING PARQUET
OPTIONS (path "/Volumes/<catalog>/<schema>/<volume>/reviews_parquet");
SELECT * FROM reviews_parquet;
Gravar arquivos Parquet particionados
Escreva arquivos Parquet particionados para desempenho de consulta otimizado em grandes conjuntos de dados. Por exemplo, leia samples.wanderbricks.bookings e grave-o em bookings_parquet_partitioned, particionado por year e month, derivados da coluna check_in.
Python
from pyspark.sql.functions import year, month
df = spark.read.table("samples.wanderbricks.bookings")
df_with_parts = df.withColumn("year", year("check_in")).withColumn("month", month("check_in"))
df_with_parts.write.format("parquet").partitionBy("year", "month").save("/Volumes/<catalog>/<schema>/<volume>/bookings_parquet_partitioned")
Scala
import org.apache.spark.sql.functions.{col, month, year}
val bookings = spark.read.table("samples.wanderbricks.bookings")
val bookingsWithParts = bookings.withColumn("year", year(col("check_in"))).withColumn("month", month(col("check_in")))
bookingsWithParts.write.format("parquet").partitionBy("year", "month").save("/Volumes/<catalog>/<schema>/<volume>/bookings_parquet_partitioned")
SQL
-- Write partitioned Parquet files by year and month
CREATE TABLE bookings_parquet_partitioned
USING PARQUET
PARTITIONED BY (year, month)
AS SELECT *, year(check_in) AS year, month(check_in) AS month
FROM samples.wanderbricks.bookings;
Recursos adicionais
- O que é o Delta Lake no Azure Databricks?: se você precisa de transações ACID, aplicação de esquema ou acesso a versões anteriores dos dados, além do desempenho colunar do Parquet, o Delta Lake é o formato recomendado para os dados armazenados no Azure Databricks.