Изменение количества разделов pyspark dataframe, считанных из паркета
Я хочу понять, как spark обрабатывает чтение Dataframe из файлов паркета и каковы свойства приложения Yarn или свойства sparkConf, которые влияют на количество разделов при выполнении первого действия на этом кадре данных.
Контекст:
- У меня есть паркетные файлы, хранящиеся в Hadoop.
- Я хочу прочитать данные за несколько месяцев => несколько файлов паркета.
- Используемая по умолчанию конфигурация для приложения:
spark.yarn.am.cores = 8 spark.executor.cores = 8 spark.executor.memory = 8g
Я сначала делаю:
file_data_frame = spark_session.read.parquet(*source_file_paths)
и затем, так как мне нужно только рассмотреть некоторые фильтры в кадре данных. Я выполняю искровой SQL-запрос на file_data_frame
, например:
df = file_data_frame.select(columns).where((func.col("col1") == value1) & (func.col("col2").isin(value2)) &
(func.col("col3").isin(list_of_values3)))
Q1: Мой вопрос на этом шаге, конечно, после выполнения действия над фреймом данных, будет ли запускать чтение всех файлов паркета, всех столбцов? или просто прочитайте столбцы, которые я вставил в свой запрос, и выберите из них строки, которые соответствуют указанным значениям?
Пример этапа работы, начатого действием:
Q2: Размер ввода, который я вижу в деталях этапа на картинке выше, это размер Dataframe или размер всех рассматриваемых файлов паркета? Насколько я понимаю, это размер паркетных файлов, которые рассматриваются вначале, а не датафрейм.
Q3: Какие конфигурации влияют на количество разделов (43k) здесь? spark.executor.instances
а также spark.executor.cores
? Что делать, если эти свойства оставлены для Yarn Scheduler для динамической обработки, установив spark.dynamicAllocation.enabled true
? Как я могу настроить номер раздела в этом случае?
Если я снова сохраню тот же самый фрейм данных в файл паркета, а затем прочту его обратно. Затем выполните действие, я нахожу его в 1300 разделах. Q4: почему?
В5: Какая разница между этими разделами перед сохранением в файл паркета и повторным чтением дает представление о настройке производительности? (имеется в виду, как я могу лучше прочитать данные с первого раза, чтобы избежать такого огромного количества разделов = 43k)