我看到Spark缓存出现问题。我正在通过spark-shell使用Spark读取Parquet数据(大约50 GB)(使用Snappy压缩)。然后,我使用选项MEMORY_ONLY_SER缓存了这些数据。数据已100%缓存。令人惊讶的是,该数据在Cache中占据了500GB。
是否可以确保缓存仅包含大约50GB的数据?我尝试设置spark.io.compression.codec =“ org.apache.spark.io.SnappyCompressionCodec”和spark.rdd.compress = true,但这并没有给我我想要的东西。默认情况下,spark.sql.inMemoryColumnarStorage.compressed为true,spark.sql.inMemoryColumnarStorage.batchSize设置为10000
我还尝试使用选项“ MEMORY_ONLY”来缓存此数据。数据已100%缓存,但其在缓存中的空间为500 GB,即与MEMORY_ONLY_SER相同。我希望这会更多。因此,以串行格式存储数据似乎无济于事。任何线索???
我还注意到,如果我对磁盘上的Parquet数据运行简单的查询(例如“为列获取不同的计数”),则该操作仅读取总50 GB中的5 GB数据(即,仅读取特定列) ,但是如果在缓存100%的数据(= 500 GB)之后运行相同的查询,该操作将读取/处理整个500 GB的缓存数据,即不读取特定于给定列的数据,这又很奇怪,您知道吗? ??