使用 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 做对了!
这更像是一个理论和直观的问题。 当我在 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 做对了!