Повторное задание Spark требует памяти водителя - PullRequest
0 голосов
/ 05 июля 2018

Я делаю несколько повторных заданий в приложении 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)
...