我开始使用镶木地板文件格式。Apache 官方网站建议使用 512MB 到 1GB 的大行组(此处)。一些在线资源(例如这个)建议默认行组大小为 128MB。
我有大量 parquet 文件,稍后我将使用 AWS Glue 上的 PySpark 在下游处理这些文件。这些文件具有非常小的行组。我无法控制我开始使用的文件,但想要组合行组,以便在下游处理之前获得“更高效”的文件(为什么?这些文件将上传到 S3 并使用 Spark 进行处理;我的理解是Spark 一次会读取一个行组,因此更多较小的行组会导致 IO 操作增加,效率低下;如果此假设无效,请赐教)。
对于这个问题,我们只考虑其中一个文件。它经过压缩(经过snappy压缩),在磁盘上的大小为 85MB。当我使用该pqrs工具检查其架构时,它报告该文件在 1,115 个行组中有 55,733 条记录,每个行组似乎约为 500 kB - 具体来说,如下所示:
row group 7:
--------------------------------------------------------------------------------
total byte size: 424752
num of rows: 50
Run Code Online (Sandbox Code Playgroud)
如果我简单地采用(1115 个行组 * 500 kB/行组),则大约为 500MB;而磁盘上的文件为 85MB。诚然,有些行组小于 500kB,但我观察了大约 100 个行组(一半在顶部,一半在底部),它们都在大致范围内。
子问题 1: 差异是多少(计算值 500MB 与实际值 85MB),因为报告的行组大小实际上pqrs代表未压缩的大小,也许行组的内存大小是多少(大概会大于磁盘上的压缩序列化大小)?换句话说,我不能做一个简单的 1115 * 500 但必须应用某种压缩因子?
子问题2: 当我看到建议的批量大小是128MB时,这到底是什么意思?未压缩的内存大小?磁盘上的序列化压缩大小?还有别的事吗?它与 所报道的内容有什么关系pqrs …