Файлы данных секционирования

Завершено

Секционирование — это метод оптимизации, позволяющий spark повысить производительность на рабочих узлах. При фильтрации данных в запросах можно добиться большего повышения производительности, устраняя ненужные операции ввода-вывода на диск.

Секционирование выходного файла

Чтобы сохранить кадр данных в виде секционированного набора файлов, используйте метод partitionBy при записи данных.

В следующем примере создается производное поле Year . Затем используется для секционирования данных.

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

Имена папок, созданные при секционирования кадра данных, включают имя столбца секционирования и значение в формате column=value , как показано ниже:

Diagram representing a partitioned file folder structure.

Примечание.

Данные можно секционированием по нескольким столбцам, что приводит к иерархии папок для каждого ключа секционирования. Например, можно секционирование порядка в примере по годам и месяцам, чтобы иерархия папок содержала папку для каждого года, которая, в свою очередь, содержит вложенную папку для каждого значения месяца.

Фильтрация файлов parquet в запросе

При чтении данных из файлов parquet в кадр данных у вас есть возможность извлекать данные из любой папки в иерархических папках. Этот процесс фильтрации выполняется с использованием явных значений и диких карта для секционированных полей.

В следующем примере следующий код вытащит заказы на продажу, которые были размещены в 2020 году.

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

Примечание.

Столбцы секционирования, указанные в пути к файлу, опущены в результирующем кадре данных. Результаты, полученные в примере запроса, не будут содержать столбец Year . Все строки будут составлять от 2020 года.