在 Parquet 中使用嵌套数据类型有什么好处?

What is the benefit of using nested data types in Parquet?

在 Parquet 文件格式中使用嵌套数据类型是否有任何性能优势?

AFAIK Parquet 文件通常是专门为查询服务创建的,例如Athena,因此创建这些值的过程还不如简单地展平值 - 从而允许更轻松的查询、更简单的模式并保留每列的列统计信息。

使用嵌套数据类型有什么好处,例如struct?

在 parquet 中保留嵌套结构会产生负面影响。问题是如果您在 parquet 文件中有嵌套结构,则 spark 谓词下推无法正常工作。

因此,即使您在 parquet 数据集中使用的字段很少,spark 也会加载并具体化整个数据集。

这里是关于这个问题长期打开的ticket

编辑

该问题已在spark 2.4版本中解决。

恰恰相反 - Parquet 是一种柱状格式,但是从 Spark 2.3.0 开始,Spark 没有正确使用它(参见 https://issues.apache.org/jira/browse/SPARK-4502)并且使用 struct/nested 格式意味着整个列将被读取,您无法从仅读取所需数据中获益

@avishek 的回答请注意,谓词下推意味着 spark(或任何利用 parquet 特性的引擎)将读取整个数据集,这意味着引擎可以使用有关列的元数据(如最小值)确定是否应该读取一个 chuck,如果需要读取一个块,parquet 将允许只读取请求的列

已编辑:将信息从评论移至主要答案