使用Parquet数据进行Spark缓存

时间:2018-08-07 16:33:43

标签: apache-spark caching parquet

我看到Spark缓存出现问题。我正在通过spark-shell使用Spark读取Parquet数据(大约50 GB)(使用Snappy压缩)。然后,我使用选项MEMORY_ONLY_SER缓存了这些数据。数据已100%缓存。令人惊讶的是,该数据在Cache中占据了500GB。

  1. 是否可以确保缓存仅包含大约50GB的数据?我尝试设置spark.io.compression.codec =“ org.apache.spark.io.SnappyCompressionCodec”和spark.rdd.compress = true,但这并没有给我我想要的东西。默认情况下,spark.sql.inMemoryColumnarStorage.compressed为true,spark.sql.inMemoryColumnarStorage.batchSize设置为10000

  2. 我还尝试使用选项“ MEMORY_ONLY”来缓存此数据。数据已100%缓存,但其在缓存中的空间为500 GB,即与MEMORY_ONLY_SER相同。我希望这会更多。因此,以串行格式存储数据似乎无济于事。任何线索???

  3. 我还注意到,如果我对磁盘上的Parquet数据运行简单的查询(例如“为列获取不同的计数”),则该操作仅读取总50 GB中的5 GB数据(即,仅读取特定列) ,但是如果在缓存100%的数据(= 500 GB)之后运行相同的查询,该操作将读取/处理整个500 GB的缓存数据,即不读取特定于给定列的数据,这又很奇怪,您知道吗? ??

0 个答案:

没有答案