Правильный способ разделения ваших данных - это использовать для данных форму года = 2019, месяц = 01 и т. Д.
Когда вы запрашиваете эти данные с помощью фильтра, такого как:
df.filter(df.year >= myYear)
Тогда Spark будет читать только соответствующие папки.
Очень важно, чтобы имя столбца фильтрации отображалось точно в имени папки.Обратите внимание, что когда вы пишете секционированные данные с помощью Spark (например, по году, месяцу, дню), он не будет записывать столбцы секционирования в файл паркета.Они вместо этого выведены из пути.Это означает, что ваш dataframe потребует их при записи.Они также будут возвращаться в виде столбцов при чтении из многораздельных источников.
Если вы не можете изменить структуру папок, вы всегда можете вручную уменьшить количество папок, которые Spark может прочитать с помощью регулярных выражений или Glob - эта статья должна предоставить больше контекста Spark SQL-запросы к секционированным данным с использованием диапазонов дат .Но очевидно, что это более сложная и ручная инструкция.
ОБНОВЛЕНИЕ : еще один пример Можно ли прочитать несколько файлов в кадре данных Spark из S3, пропуская несуществующие?
Также из «Spark - Полное руководство: обработка больших данных стала проще» Билла Чамберса:
Секционирование - это инструмент, который позволяет вам контролировать, какие данные хранятся (и где) какты пишешь это.Когда вы записываете файл в многораздельный каталог (или таблицу), вы в основном кодируете столбец как папку.Это позволяет вам пропускать большое количество данных, когда вы собираетесь читать их позже, что позволяет вам читать только те данные, которые имеют отношение к вашей проблеме, вместо того, чтобы сканировать полный набор данных....
Это, вероятно, самая низкая оптимизация, которую вы можете использовать, когда у вас есть таблица, по которой читатели часто фильтруют перед манипулированием.Например, дата особенно характерна для раздела, потому что в нисходящем направлении мы часто хотим просматривать только данные за предыдущую неделю (вместо сканирования всего списка записей).