使用 to_parquet 函数创建的 dask parquet 文件结构

dask parquet file structure created using to_parquet function

这更像是一个理论和直观的问题。 当我在 dask_dataframe.to_parquet() 中向 partition_on 变量提供列列表时,它会按照列的顺序创建类似目录的结构,提供的更像是嵌套结构。

但是,parquet 的实际文档说它是一个列存储数据结构,如果我们向它提供一个列列表,那么它会根据这些列创建一个分区 i:e 所有行(如果未提供指定列的行大小)进入一个分区。 dask to_parquet 这样做对吗?

actual documentation of parquet says

规范的 parquet 文档没有解决将数据集拆分成多个文件的问题。目录结构和可选的特殊 _metadata 文件是我相信首先由 Hive 设计的约定。它是对标准镶木地板规范的补充,但并不违反它。

每个数据文件都包含许多行,并且本身就是一个有效的 parquet 数据集,包含一个或多个 "row groups"(parquet 的逻辑分区),并且每一列都被写入一个单独的部分文件并编码为 "pages" 的数字。 Parquet 允许字典编码,但这是每页的事情,并且没有全局分类标签方案,因此将值编码到路径名中非常有用,并且还允许预过滤我们想要的文件访问,当只需要一些值时。

简短回答:是的,dask 做对了!