Datové soubory oddílů

Dokončeno

Dělení je technika optimalizace, která umožňuje Sparku maximalizovat výkon napříč pracovními uzly. Při filtrování dat v dotazech je možné dosáhnout vyššího zvýšení výkonu odstraněním nepotřebných vstupně-výstupních operací disku.

Rozdělení výstupního souboru

Pokud chcete datový rámec uložit jako dělenou sadu souborů, použijte při zápisu dat metodu partitionBy .

Následující příklad vytvoří odvozené pole Year . Pak ho použije k rozdělení dat.

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")

Názvy složek vygenerované při dělení datového rámce zahrnují název a hodnotu sloupce dělení ve formátu column=value , jak je znázorněno tady:

Diagram representing a partitioned file folder structure.

Poznámka:

Data můžete rozdělit podle několika sloupců, což vede k hierarchii složek pro každý klíč dělení. Můžete například rozdělit pořadí v příkladu podle roku a měsíce, aby hierarchie složek obsahovala složku pro každou hodnotu roku, která zase obsahuje podsložku pro každou hodnotu měsíce.

Filtrování souborů parquet v dotazu

Při čtení dat ze souborů parquet do datového rámce máte možnost načítat data z libovolné složky v hierarchických složkách. Tento proces filtrování se provádí s použitím explicitních hodnot a zástupných znaků pro dělená pole.

V následujícím příkladu následující kód stáhne prodejní objednávky, které byly umístěny v roce 2020.

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

Poznámka:

Ve výsledném datovém rámci se vynechá sloupce dělení zadané v cestě k souboru. Výsledky vytvořené ukázkovým dotazem neobsahují sloupec Year – všechny řádky budou od roku 2020.