问题描述
在从 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 连接器的统计报告,告诉您读取的字节数、丢弃的字节数等。