在 S3 的情况下,Spark -3.x 是否仅读取来自 parquet 等文件格式的过滤数据,而不是将整个文件加载到内存中

问题描述

在从 S3 加载/读取 parquet 文件的情况下,spark 3.X 是在内存中加载完整的文件后执行过滤,还是像在 Hadoop 的情况下加载过滤后的数据?

解决方法

它会加载和搜索,但如果您使用的是 s3a 连接器和许多 Spark 版本捆绑的 hadoop-2.7 二进制文件,则该 seek() 是通过破坏任何现有的 GET 请求然后从新的再次寻找 EOF 的位置。这对于需要大量搜索的代码是非常低效的; hadoop-2.8+ 让你切换到随机 IO(fs.s3a.experimental.fadvise random)。

提示:对于 Hadoop 2.8+,在您拥有的 FSDataInputStream 上调用 toString(),您将获得来自 s3a 和 abfs 连接器的统计报告,告诉您读取的字节数、丢弃的字节数等。