我正在尝试通过利用分区和下推之类的东西来优化一些Spark查询和Parquet模式。我的理解是,这些技术允许跳过大部分Parquet文件。
有没有一种方法可以显示Spark读取的字节数与Parquet文件的总大小?另外,读取操作的数量是多少? (我正在使用S3,因此由于S3 API调用的开销,我想尽量减少读取操作的次数。)
答案 0 :(得分:0)
如果您使用的是Apache Spark(而不是EMR的私有版本),则S3A连接器会收集lot of stats,其中包括:关闭连接时丢弃的字节,HEAD请求#,限制操作等
但是:它并没有真正收集在火花中,并且因为每个s3存储桶都使用单个s3存储桶的文件系统类实例(因此统计数据),即使您确定如何收集它们,它们也会过高估计努力的程度。这里有改善的机会,但这需要大量的工作。当前获得的全部是按线程读取的字节数,写入的字节数统计信息,如果HTTP上载数据的请求是在后台线程中完成的,则实际上可能会少报告写入的字节数。
您可以启用org.apache.hadoop.fs.s3a.S3AStorageStatistics
来在调试时记录日志,然后每个spark工作者的日志实际上将跟踪这些操作的发生情况,但是会带来很大的噪音。在尝试调试东西或对Parquet读取器本身之类的东西进行低级性能优化时,此方法尤其有用。
恐怕没有EMR的想法,不是我的代码。