我在spark应用程序中做了一些重复的任务:
我计算一些统计数据
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)