网站首页 > 博客文章 正文
Apache Parquet是一种高效的列式存储格式,旨在提供在大数据处理环境中的高性能和可扩展性。它使用了一个自描述的、存储效率高的、高度可扩展的列式存储格式,以便有效地存储和处理大规模数据集。Parquet是Apache Hadoop生态系统的一部分,被广泛应用于数据分析、数据湖、机器学习、数据仓库等领域。
特征与优点
- 存储效率高/高性能:Parquet 利用了列式存储格式的优势,能够以高效的方式存储和管理大规模数据,减少存储空间占用。由于采用了列式存储结构,Parquet 在处理查询和分析操作时表现出较高的性能,能够显著提高数据处理速度。
- 自描述:Parquet 文件包含有关数据源和数据结构的元数据,能够帮助用户更好地理解和管理数据集。
- 可压缩性强:Parquet 支持多种数据压缩算法,能够在保证数据完整性的前提下降低存储空间和网络传输成本。
- 支持丰富的数据模型:支持逻辑数据模型,例如整数、浮点数、字符串等。这样的模型使得数据能够被有效地压缩和编码,同时保持结构化的特性。Parquet 支持嵌套数据类型,允许你在列中存储复杂的数据结构,比如数组、结构体等。这使得 Parquet 能够处理复杂的数据,并保持数据的层次结构。
- 兼容性和性能:Parquet 与复杂数据良好配合,并且与许多数据处理框架(如 Hadoop 和 Spark)兼容,提高了性能。
Parquet文件格式( File Format)
详细的文件格式参考文档:https://parquet.apache.org/docs/file-format/
- Block(HDFS块):指的是HDFS中的一个块,对于描述这种文件格式,其含义不变。该文件格式设计得能够在HDFS上良好运作。
- 文件(File):一个必须包含文件元数据的HDFS文件。实际上,它不需要包含数据本身。
- 行组(Row group):数据在行方向的逻辑分区。对于行组,没有保证其存在物理结构。一个行组由数据集中每个列的列块组成。
- 列块(Column chunk):一个特定列的数据块。它们存在于特定的行组中,并且在文件中保证是连续的。
- 页面(Page):列块被划分成页面。页面在概念上是一个不可分割的单元(就压缩和编码而言)。在一个列块中可以有多个页面类型,它们交织在一起。
从层次上看,一个文件包含一个或多个行组。一个行组包含每列恰好一个列块。列块包含一个或多个页面。
Parquet 与Python 示例1:存储和加载
python pandas 支持Parquet 格式,与csv 一下简单对比,首先我们测试存储情况:
import pandas as pd
df = pd.read_csv('results.csv')
df.to_parquet('df_test.parquet.gzip', compression='gzip')
df.to_parquet('df_test.parquet.snappy', compression='snappy')
df.to_parquet('df_test.parquet', compression=None)
import os
file_size = os.path.getsize('results.csv')
print("results.csv size:", f'{file_size:,}', "bytes")
file_size = os.path.getsize('df_test.parquet.gzip')
print("df_test.parquet.gzip size:", f'{file_size:,}', "bytes")
file_size = os.path.getsize('df_test.parquet.snappy')
print("df_test.parquet.snappy size:", f'{file_size:,}', "bytes")
file_size = os.path.getsize('df_test.parquet')
print("df_test.parquet size:", f'{file_size:,}', "bytes")
parquet格式的存储于csv 减少80%,结合压缩后是csv 的 10%,可以节约90% 的空间。为数据加载测试,我们将数据放大100倍。
%time df = pd.read_csv('df_test.csv')
%time df = pd.read_parquet('df_test.parquet.gzip')
%time df = pd.read_parquet('df_test.parquet.snappy')
%time df = pd.read_parquet('df_test.parquet')
使用pandas 加载dataframe 也有大幅度提升,提升了2-3倍。
DuckDB OnParquet
DuckDB 与 Parquet 的集成是无缝的,使得轻松使用SQL进行Parquet 文件上数据进行分析、查询和统计。
DuckDB 最大的优势在于能够对庞大的数据集运行查询,无论是具有大量小文件还是一个巨大的文件。使用熟悉的 SQL 语法在个人电脑/笔记本上执行探索性数据分析(EDA)任务,为分析大量数据带来了新的视角。
select home_team ,count(*),avg(home_score)
from read_parquet('/home/df_test.parquet.snappy')
group by home_team
Apache Parquet 是一种高效的列式存储格式,旨在提供大数据处理环境中的高性能和可扩展性。其特点包括高存储效率、自描述性、强大的压缩能力、支持丰富的数据模型以及与多种数据处理框架的兼容性。Parquet 格式的存储和加载速度明显优于传统的 CSV 格式,能够节约大量存储空间并提升数据处理效率,为数据分析、数据湖、机器学习等领域带来了便利与效益。
猜你喜欢
- 2024-11-08 写Parquet的同时提高Spark作业性能300%
- 2024-11-08 0805-CDH5中的Parquet迁移至CDP中兼容性验证
- 2024-11-08 0608-如何将ORC格式且使用了DATE类型的Hive表转为Parquet(续)
- 2024-11-08 大数据正当时,理解这几个术语很重要
- 2024-11-08 苹果IOS游戏分享:「帕奎特-PARQUET」-解锁完整章节,二次元恋爱
- 2024-11-08 什么是魅力值拉满的男士香调?(男士香料)
- 2024-11-08 0607-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表
- 2024-11-08 数据工程101:揭开Hadoop数据格式的神秘面纱:Avro,ORC和Parquet
- 2024-11-08 为什么数据格式很重要?Parquet vs Protobuf vs JSON
- 2024-11-08 四十一、SparkSQL读取parquet数据源(必须要弄懂)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)