Partycjonowanie plików danych
Partycjonowanie to technika optymalizacji, która umożliwia platformie Spark maksymalizację wydajności w węzłach procesu roboczego. Zwiększenie wydajności można osiągnąć podczas filtrowania danych w zapytaniach, eliminując niepotrzebne we/wy dysku.
Partycjonowanie pliku wyjściowego
Aby zapisać ramkę danych jako partycjonowany zestaw plików, użyj metody partitionBy podczas zapisywania danych.
Poniższy przykład tworzy pochodne pole Year. Następnie używa ich do partycjonowania danych.
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")
Nazwy folderów generowane podczas partycjonowania ramki danych obejmują nazwę i wartość kolumny partycjonowania w formacie column=value, jak pokazano poniżej:
Uwaga
Dane można podzielić na partycje według wielu kolumn, co powoduje hierarchię folderów dla każdego klucza partycjonowania. Na przykład można podzielić kolejność w przykładzie według roku i miesiąca, aby hierarchia folderów zawierała folder dla każdej wartości roku, który z kolei zawiera podfolder dla każdej wartości miesiąca.
Filtrowanie plików parquet w zapytaniu
Podczas odczytywania danych z plików parquet do ramki danych można ściągać dane z dowolnego folderu w folderach hierarchicznych. Ten proces filtrowania odbywa się przy użyciu jawnych wartości i symboli wieloznacznych względem pól partycjonowanych.
W poniższym przykładzie poniższy kod spowoduje ściągnięcie zamówień sprzedaży, które zostały złożone w 2020 roku.
orders_2020 = spark.read.parquet('/partitioned_data/Year=2020')
display(orders_2020.limit(5))
Uwaga
Kolumny partycjonowania określone w ścieżce pliku zostaną pominięte w wynikowej ramce danych. Wyniki wygenerowane przez przykładowe zapytanie nie zawierają kolumny Year — wszystkie wiersze pochodzą z 2020 roku.