我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Parquet文件详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Parquet文件详解

1、parquet文件简介

Apache Parquet是Apache Hadoop生态系统的一种免费的开源面向列的数据存储格式。 它类似于Hadoop中可用的其他列存储文件格式,如RCFile格式和ORC格式。
Apache Parquet 是由 Twitter 和 Cloudera 最先发起并合作开发的列存项目,也是 2010 年 Google 发表的 Dremel 论文中描述的内部列存格式的开源实现。和一些传统的列式存储(C-Store、MonetDB 等)系统相比,Dremel/Parquet 最大的贡献是支持嵌套格式数据(Nested Data)的列式存储。嵌套格式可以很自然的描述互联网和科学计算等领域的数据,Dremel/Parquet “原生”的支持嵌套格式数据减少了规则化、重新组合这些大规模数据的代价。
Parquet 的设计与计算框架、数据模型以及编程语言无关,可以与任意项目集成,因此应用广泛。目前已经是 Hadoop 大数据生态圈列式存储的事实标准。

行存和列存的区别

下图是拥有 A/B/C 3 个字段的简单示意表:
在这里插入图片描述
在面向行的存储中,例如csv文件,每列的数据依次排成一行,行的存储方式如下所示:
在这里插入图片描述
而在面向列的存储中,相同列的数据存储在一起,列的存储如下所示,
在这里插入图片描述
从上图,显而易见,行存适用于数据整行读取场景,而列存更适用于读取部分列数据(统计分析等)的场景。

parquet文件的优势

有这样一句话流传:如果说 HDFS 是大数据时代文件系统的事实标准,Parquet 就是大数据时代存储格式的事实标准。Parquet 这种列存的使用场景如下:

  1. Parquet 是一种支持嵌套结构的列式存储格式
  2. 非常适用于 OLAP 场景,按列存储和按列扫描

Parquet 这种列存的特点或优势主要体现在两方面

  1. 更高的压缩比
    列存使得更容易对每个列使用高效的压缩和编码,降低磁盘空间。(网上的case是不压缩、gzip、snappy分别能达到11/27/19的压缩比)
  2. 更小的IO操作
    使用映射下推和谓词下推,只读取需要的列,跳过不满足条件的列,能够减少不必要的数据扫描,带来性能的提升并在表字段比较多的时候更加明显。

关于映射下推与谓词下推: 映射下推,这是列式存储最突出的优势,是指在获取数据时只需要扫描需要的列,不用全部扫描。
谓词下推,是指通过将一些过滤条件尽可能的在最底层执行以减少结果集。谓词就是指这些过滤条件,即返回bool:true和false的表达式,比如SQL中的大于小于等于、Like、Is Null等。

2、parquet文件结构

从内容和元数据的角度来看,Parquet文件主要包含两部分内容:

  1. data
  2. metadata
    data是文件中的数据,metadata是文件的元数据信息。数据data首先写入文件,元数据metadata最后写入文件。
    在这图一里插入图片描述
    图一

    图二

从图一和图二所示,一个Parquet有可以分为以下的3个部分:

  1. Header文件头信息
  2. Data Block数据信息
  3. Footer尾部信息
    一个Parquet一般主要包含一个header,一个Data以及一个footer。其中一个Data包含多个Row Group。

Header
header中包含了一个4-byte的magic number(PAR1),这个magic number代表当前该文件是是Parquet格式。

Data Block
Data Block是文件存放具体内容的位置,其中就涉及了Parquet文件的结构,是非常重要的部分。针对文件的存储结构展开说明,
关于parquet文件结构的术语如下:

  1. Block (hdfs Block): 表示hdfs中的块,描述该文件格式的含义不变。该文件格式被设计成在hdfs上很好地工作。
  2. File: hdfs文件,必须包含文件的元数据。它不需要实际包含数据。
  3. 行组(Row Group): 数据的逻辑水平分区。行组没有保证的物理结构。行组由数据集中每一列的列块组成。一个行组中包含的具体行数是不确定的
  4. 列块(Colunm Chunk): 特定列的数据块。它们位于特定的行组中,并保证在文件中是连续的。
  5. 页(Pages): 列块被划分为页。从概念上讲,页面是一个不可分割的单元,压缩和编码都是针对Page进行的。列块中可以有多个分页类型。

官网文件结构图如下所示,其中一个File包含多个Row groups行组,一个行组中包含多个列块,一个列块对应一列数据,并且一个列块中有多个数据页Page,数据页Page才是文件存放的基本单位,数据页可以进行数据压缩和编码。下图的左边和右边合起来是一个完整的文件,左边在上面,右边在下面。
在这里插入图片描述
如上图所示,Parquet 的存储模型主要由 **行组(Row Group)、列块(Column Chuck)、页(Page)**组成。Block和File与Parquet文件结构关系不大。
1、行组,Row Group:一个完整的Parquet文件在水平方向上将被划分为一个或者多个行组,默认一个行组的大小与 HDFS Block 块大小对齐,主要是为了保证Parquet一个行组会被一个Mapper 处理。一个行组中有多少行,是不确定的,和行组以及列块的大小有关系。
2、列块,Column Chunk:行组中的每一列都是一个列块,行组中有n列,就会有n个列块,不过这个n个列块的名字可能一样的,一个列块具有相同的数据类型。
3、页,Page:Parquet 是页存储方式,每一个列块包含一个或者多个页,一个页是最小的编码单位,同一列块的不同页可以使用不同的编码方式。压缩和编码都是针对Page进行的。

也可以用以下的方式显示文件的机构:

4-byte magic number "PAR1"<RowGroup-1 Column 1 Chunk 1-1 + Column Metadata><RowGroup-1 Column 2 Chunk 1-2 + Column Metadata><RowGroup-1 Column N Chunk 1-3 + Column Metadata><RowGroup-2 Column 1 Chunk 2-1 + Column Metadata><RowGroup-2 Column 2 Chunk 2-2 + Column Metadata><RowGroup-2 Column N Chunk 2-3 + Column Metadata><RowGroup-M Column 1 Chunk M-1 + Column Metadata><RowGroup-M Column 2 Chunk M-2 + Column Metadata><RowGroup-M Column N Chunk M-3 + Column Metadata>File Metadata4-byte length in bytes of file metadata4-byte magic number "PAR1"

整个文件有 N 个列,整个文件被划分成M 个行组,每个行组都有N个列,行组中的每个列只有一个Chunk,一个行组就有N个Chunk。文件的元数据信息存储在数据之后,包含了所有列块元数据信息的起始位置。读取的时候首先从文件末尾读取文件元数据信息,再从元数据总其中找到某一个需要的 Column Chunk 信息,并依次读取。
Parquet文件中的数据被划分为多个Row Group。这些Row Group由一个或多个column chunks组成,column chunks对应于数据集中的一列。每个column chunks的数据以page的形式写入。每个pages只包含特定列的值,因此pages是非常好的压缩候选对象,因为它们包含类似的值。

FOOTER
文件的所有元数据信息保存在footer中。footer中的元数据包括version、schema、任何额外的键-值对,以及列元数据。列元数据包括类型、路径、编码、值的数量、压缩大小等。Footer中除了文件元数据之外,它还有一个4字节字段长度的footer length,以及一个4字节的魔术字(PAR1)。

3、parquet文件的元数据(metadata)内容

4、schema的讲解和使用

来源地址:https://blog.csdn.net/weixin_42704604/article/details/128080926

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Parquet文件详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Parquet文件详解

1、parquet文件简介 Apache Parquet是Apache Hadoop生态系统的一种免费的开源面向列的数据存储格式。 它类似于Hadoop中可用的其他列存储文件格式,如RCFile格式和ORC格式。 Apache Parque
2023-08-19

Golang如何处理parquet文件

这篇文章主要介绍“Golang如何处理parquet文件”,在日常操作中,相信很多人在Golang如何处理parquet文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang如何处理parquet文件
2023-07-05

Golang处理parquet文件实战指南

这篇文章主要给大家介绍了关于Golang处理parquet文件的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用Golang具有一定的参考学习价值,需要的朋友可以参考下
2023-03-07

R语言中如何读取Parquet文件

在R语言中,可以使用arrow包来读取Parquet文件。首先需要安装arrow包,然后使用arrow::read_parquet()函数来读取Parquet文件。以下是一个示例代码:# 安装arrow包install.package
R语言中如何读取Parquet文件
2024-04-08

AndroidManifest文件详解

AndroidManifest 官方解释是应用清单(Manifest意思是货单),每个应用的根目录中都必须包含一个,并且文件名必须为AndroidManifest。这个文件中包含了APP的配置信息,系统需要根据里面的内容运行APP的代码,显
2023-08-18

AssemblyInfo.cs文件详解

AssemblyInfo.cs是一个C#项目中的元数据文件,它包含了项目的一些重要信息,如程序集的版本号、标题、描述等。以下是AssemblyInfo.cs文件中常见的属性及其说明:1. AssemblyTitle:程序集的标题。这通常是一
2023-09-14

pom文件详解

pom文件详解 前言什么是POM文件?POM文件的基本结构POM文件的常用配置项1. 坐标信息2. 依赖项配置3.构建配置4. 插件配置5. 仓库配置 父子pom父POM子POM父子POM的优点父子POM的使用 总结 前
2023-08-16

将 parquet 文件转换为带有嵌套元素的 Golang 结构

php小编新一将介绍如何将 parquet 文件转换为带有嵌套元素的 Golang 结构。Parquet 是一种高效的列式存储格式,而 Golang 是一种强大的编程语言,将它们结合起来可以帮助我们更好地处理和分析大量的数据。通过使用适当的
将 parquet 文件转换为带有嵌套元素的 Golang 结构
2024-02-10

.Net AssemblyInfo.cs文件详解

AssemblyInfo.cs文件是一个C#项目的元数据文件,用于指定程序集的属性和信息。它包含了程序集的版本号、作者、公司、版权信息等重要的元数据。下面是一个典型的AssemblyInfo.cs文件的内容:```csharpusing S
2023-09-23

python文件处理--文件读写详解

目录1.读取文件2.写入文件总结1. 读取文件 文件读取很简单,就三步。第一:在Windows的记事本中直接输入“愿你出走半生归来仍是少年!”第二:通过代码读取文件 步骤: 1.使用open()函数打开文件。myfile = open(r'
2022-06-02

详解Linux解压缩文件

gzip 压缩:gzip -v 文件(夹) eg: gzip -v b.log ----> b.log.gz gzip -c 文件(夹) > 文件(夹).gz eg: gzip -c b.log > b.lo
2022-06-04

Python 解压缩文件详解

zipfile模块及相关方法介绍:1 压缩1.1 创建zipfile对象zipfile.ZipFile(file, mode='r', compression=0, allowZip64=True, compresslevel=None)创
2023-01-31

Redis2.8配置文件中文详解

add by zhj : 没找到本文的原文。另外,redis配置文件中文翻译 也翻译的不错,可以与本文对照看。两篇文章都是以Redis2.8来介绍的 在Redis中直接启动redis-server服务时, 采用的是默认的配置文件。采用red
2022-06-04

Node.js文件操作详解

Node有一组数据流API,可以像处理网络流那样处理文件,用起来很方便,但是它只允许顺序处理文件,不能随机读写文件。因此,需要使用一些更底层的文件系统操作。 本章覆盖了文件处理的基础知识,包括如何打开文件,读取文件某一部分,写数据,以及关闭
2022-06-04

package.json文件配置详解

package.json 是npm init命令初始化后,在项目的根目录下自动生成的配置文件,它定义了这个项目的配置信息以及所需要的各种模块,npm install根据这个命令,自动下载所需的模块。package.json就是一个json文
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录