【发布时间】:2019-10-06 23:57:28
【问题描述】:
在 Parquet 文件格式中使用嵌套数据类型是否会带来任何性能优势?
AFAIK Parquet 文件通常是专门为查询服务创建的,例如Athena,因此创建这些值的过程还不如简单地展平值 - 从而允许更轻松的查询、更简单的架构并保留每列的列统计信息。
使用嵌套数据类型可以获得什么好处,例如struct?
【问题讨论】:
标签: apache-spark nested parquet data-files
在 Parquet 文件格式中使用嵌套数据类型是否会带来任何性能优势?
AFAIK Parquet 文件通常是专门为查询服务创建的,例如Athena,因此创建这些值的过程还不如简单地展平值 - 从而允许更轻松的查询、更简单的架构并保留每列的列统计信息。
使用嵌套数据类型可以获得什么好处,例如struct?
【问题讨论】:
标签: apache-spark nested parquet data-files
在镶木地板中保留嵌套结构会产生负面影响。如果 parquet 文件中有嵌套结构,问题是 spark 谓词下推无法正常工作。
因此,即使您使用 parquet 数据集中的少数字段,spark 也会加载并具体化整个数据集。
这里是ticket关于这个问题打开了很长时间。
编辑
此问题已在 spark 2.4 版本中得到解决。
【讨论】:
恰恰相反 - Parquet 是一种列格式,但是从 Spark 2.3.0 开始,Spark 没有正确使用它(请参阅https://issues.apache.org/jira/browse/SPARK-4502),并且使用结构/嵌套格式意味着将读取整个列,您可以'仅从读取所需数据中受益
@avishek 的答案请注意,谓词下推意味着 spark(或任何利用 parquet 特性的引擎)将读取整个数据集,这意味着引擎可以使用有关列的元数据(如 min man 值)来确定如果应该读取一个卡盘,如果需要读取一个块,parquet 将允许仅读取请求的列
已编辑:将信息从评论移至主要答案
【讨论】: