Почему файл Parquet, написанный с помощью Polars, выполняет запросы быстрее, чем файл, написанный с помощью Spark?Python

Программы на Python
Ответить
Anonymous
 Почему файл Parquet, написанный с помощью Polars, выполняет запросы быстрее, чем файл, написанный с помощью Spark?

Сообщение Anonymous »

Я пишу файлы Parquet, используя две разные платформы — Apache Spark (Scala) и Polars (Python) — с одной и той же схемой и данными. Однако, когда я запрашиваю полученные файлы Parquet с помощью Apache DataFusion, я замечаю значительную разницу в производительности:
Запросы выполняются быстрее в файле Parquet, написанном Polars.
Запросы выполняются дольше в файле Parquet, написанном Spark.
Я ожидал аналогичной производительности, поскольку схема и данные остаются неизменными. Я пытаюсь понять, почему возникает это несоответствие.
Вот некоторые подробности о моей настройке:
Версия Spark: 3.5.0
Версия Polars: 1.24.0
Параметры записи в паркет:
Spark: df.write.parquet("path")
Polars: df.write_parquet("path")

Я тоже пробовал менять компрессию для искры, но не смог добиться тех же результатов, что и паркет от Polars.
Кто-нибудь сталкивался с подобной проблемой? Какие аспекты написания паркета Spark и Polars могут вызвать такую ​​разницу в производительности? Существуют ли конкретные конфигурации, которые мне следует проверить при написании Parquet в любой из инфраструктур?
Это некоторые конфигурации, которые я попробовал настроить для Spark перед написанием.
.config("spark.sql.parquet.compression.codec", "zstd")
.config("parquet.enable.dictionary", "true")
.config("parquet.dictionary.pageSize", 1048576)
.config("parquet.block.size", 4 * 1024 * 1024) // Smaller row groups (4MB) for DataFusion
.config("parquet.page.size", 128 * 1024)
.config("parquet.writer.version", "PARQUET_2_0")
.config("parquet.int96RebaseModeInWrite", "CORRECTED")
.config("spark.sql.parquet.mergeSchema", "false")
.config("parquet.column.index.enabled", "true")
.config("parquet.column.index.pageSize", "64 * 1024")
.config("parquet.statistics.enabled", "true")
.config("parquet.int64.timestats", "false")
.config("spark.sql.parquet.outputTimestampType", "TIMESTAMP_MICROS")
.config("spark.sql.parquet.filterPushdown", "true")


Подробнее здесь: https://stackoverflow.com/questions/795 ... ten-with-s
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»