Я делаю несколько повторных заданий в приложении Spark:
- Я читаю сжатый snappy файл паркета и фильтрую дату
Я вычисляю статистику
dataFrame.filter(date=...)
.groupyBy(date)
.agg(sum(when(conditions, $"stat1")))
.agg(...)
Я записываю результат в файл CSV
Это делается около 100 раз с разными датами в одно и то же время выполнения. Каждая итерация может выполняться без проблем, однако при использовании памяти драйвера 4 Go после 10 итераций происходит ее нехватка, а при 25 итерациях - 8 Go. Для каждой итерации вычисления выполняются из одного и того же объекта данных (т. Е. Паркет читается только один раз).
Похоже, что что-то остается в памяти драйвера между каждой итерацией. Какое может быть объяснение?
Edit1: вот пример чтения csv.
spark.read
.option("header", "true")
.csv(source)
.select(myCols)
.withColumnRenamed(...)
.filter($"time" < ...)
.repartition($"time")
.write
.option("compression", "snappy")
.option("parquet.block.size", 32*1024*1024)
.mode(SaveMode.Append)
.partitionBy("time")
.parquet(target)