生成镶木地板文件 - R 和 Python 之间的差异

Posted

技术标签:

【中文标题】生成镶木地板文件 - R 和 Python 之间的差异【英文标题】:Generating parquet files - differences between R and Python 【发布时间】:2018-01-07 00:32:16 【问题描述】:

我们在Dask(Python)和Drill(R使用Sergeant数据包)中生成了一个parquet文件。我们注意到了一些问题:

    Dask 的格式(即fastparquet)有一个_metadata 和一个_common_metadata 文件,而R \ Drill 中的parquet 文件没有这些文件,而是有parquet.crc 文件(可以删除)。这些parquet 实现之间有什么区别?

【问题讨论】:

我知道parquet versions有各种不同,但很难理解其中的区别 您应该将这三个问题作为单独的问题发布在 Stack Overflow 上。将多个作为单个实例发布是很难回答和集成到 SO UI 中的。 感谢输入 - 会这样做 【参考方案1】:

(只回答1),请分开发帖,方便回答)

_metadata_common_metadata 是 Parquet 数据集不需要的辅助文件,Spark/Dask/Hive/... 使用这些辅助文件来推断数据集的所有 Parquet 文件的元数据,而不需要读取所有文件的页脚。与此相反,Apache Drill 在每个文件夹中(按需)生成一个类似的文件,其中包含所有 Parquet 文件的所有页脚。仅在对数据集的第一次查询时读取所有文件,后续查询将仅读取缓存所有页脚的文件。

使用_metadata_common_metadata 的工具应该能够利用它们来获得更快的执行时间,而不是依赖它们进行操作。如果它们不存在,则查询引擎只需要读取所有页脚。

【讨论】:

非常正确。此外,fastparquet(dask 将用于创建文件的库)也可以读取没有_metadata 的 parquet 数据文件列表,但最初加载元数据会更慢。 Spark 曾经制作这些文件,但现在不再制作了,我相信 hive 仍然制作。

以上是关于生成镶木地板文件 - R 和 Python 之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

如何读取具有相同结构但不同列名的分区镶木地板?

我对镶木地板文件和 python 完全陌生,谁能告诉我如何在 pyspark 中读取带有标题的镶木地板文件

在 Azure Databricks 中的日期范围之间读取镶木地板文件的有效方法

流式镶木地板文件python并且仅下采样

AWS Spectrum 为 AWS Glue 生成的镶木地板文件提供空白结果

雪花镶木地板加载模式生成