为什么SPARK将RDD溢出缓存到磁盘?

时间:2018-03-15 08:37:08

标签: scala apache-spark

我有下一个代码,我在那里重新分区过滤输入数据并保留它:

val df = sparkSession.sqlContext.read
      .parquet(path)
      .as[struct1]
      .filter(dateRange(_,lowerBound,upperBound))
      .repartition(nrInputPartitions)
      .persist()

df.count

我希望所有数据都存储在内存中,但我在Spark UI中得到以下内容:

  

存储

Size in Memory   424.2 GB 
Size on Disk     44.1 GB

是因为某些分区没有足够的内存,而Spark会自动切换到MEMORY_AND_DISK存储级别吗?

1 个答案:

答案 0 :(得分:1)

  

是因为某些分区没有足够的内存,而Spark会自动切换到MEMORY_AND_DISK存储级别吗?

几乎。这是因为它不是RDD,而是DatasetDatasets的默认存储级别是MEMORY_AND_DISK。否则你的怀疑是真的 - 如果没有足够的内存或缓存需要数据进入磁盘(但从技术上讲,它不是aspill)。