在从s3加载/读取parquet文件的情况下,spark3.x是在内存中加载完整的文件,然后执行过滤,还是像hadoop那样加载过滤后的数据?
xurqigkl1#
它加载并四处寻道,但是如果您使用的是s3a连接器和hadoop-2.7二进制文件(许多spark发行版都与之捆绑在一起),那么seek()是通过中断任何现有的get请求,然后从新的seek位置再次执行另一个get到eof来实现的。这是非常低效的寻找重代码;hadoop-2.8+允许您切换到随机io(fs.s3a.experimental.fadvise random)。提示:对于hadoop2.8+,在您拥有的fsdatainputstream上调用tostring(),您将从s3a和abfs连接器得到一个统计报告,告诉您读取的字节数、丢弃的字节数等。
1条答案
按热度按时间xurqigkl1#
它加载并四处寻道,但是如果您使用的是s3a连接器和hadoop-2.7二进制文件(许多spark发行版都与之捆绑在一起),那么seek()是通过中断任何现有的get请求,然后从新的seek位置再次执行另一个get到eof来实现的。这是非常低效的寻找重代码;hadoop-2.8+允许您切换到随机io(fs.s3a.experimental.fadvise random)。
提示:对于hadoop2.8+,在您拥有的fsdatainputstream上调用tostring(),您将从s3a和abfs连接器得到一个统计报告,告诉您读取的字节数、丢弃的字节数等。