Arquivos de dados de partição

Concluído

O particionamento é uma técnica de otimização que permite ao Spark maximizar o desempenho entre os nós de trabalho. Mais ganhos de desempenho podem ser obtidos ao filtrar dados em consultas eliminando a E/S de disco desnecessária.

Particionar o arquivo de saída

Para salvar um dataframe como um conjunto particionado de arquivos, use o método partitionBy ao gravar os dados.

O exemplo a seguir cria um campo Ano derivado. Em seguida, usa-os para particionar os dados.

from pyspark.sql.functions import year, col

# Load source data
df = spark.read.csv('/orders/*.csv', header=True, inferSchema=True)

# Add Year column
dated_df = df.withColumn("Year", year(col("OrderDate")))

# Partition by year
dated_df.write.partitionBy("Year").mode("overwrite").parquet("/data")

Os nomes de pasta gerados ao particionar um dataframe incluem o nome e o valor da coluna de particionamento em um formato column=value , conforme mostrado aqui:

Diagrama que representa uma estrutura de pasta de arquivo particionada.

Observação

Você pode particionar os dados por várias colunas, o que resulta em uma hierarquia de pastas para cada chave de particionamento. Por exemplo, você pode particionar a ordem no exemplo por ano e mês, para que a hierarquia de pastas inclua uma pasta para cada valor de ano, que, por sua vez, contém uma subpasta para cada valor mensal.

Filtrar arquivos parquet em uma consulta

Ao ler dados de arquivos parquet em um dataframe, você tem a capacidade de efetuar pull de dados de qualquer pasta dentro das pastas hierárquicas. Esse processo de filtragem é feito com o uso de valores explícitos e curingas nos campos particionados.

No exemplo a seguir, o código a seguir efetuará pull dos pedidos de vendas, que foram feitos em 2020.

orders_2020 = spark.read.parquet('/partitioned_data/Year=2020')
display(orders_2020.limit(5))

Observação

As colunas de particionamento especificadas no caminho do arquivo são omitidas no dataframe resultante. Os resultados produzidos pela consulta de exemplo não incluiriam uma coluna Year – todas as linhas seriam de 2020.