Parquet使用指南:一个超越CSV、提升数据处理效率的存储格式

在这里插入图片描述

前言

在大数据时代,数据存储和处理的效率越来越重要。同时,我们在工作中处理的数据也越来越多,从excel格式到csv格式,从文件文档传输到直接从数据库提取,数据单位也从K到M再到G。

当数据量达到了G以上,几G甚至几十G,在使用python时就能察觉到数据处理效率在变慢。在这种情况下有什么更好的解决方法吗?

什么是Parquet?

Parquet是一种开源的列式存储数据文件格式,旨在高效存储和检索数据。它提供了高效的数据压缩和编码方案,能够处理大量复杂数据。同时,支持多种编程语言。Parquet被设计为批处理和交互工作负载的通用交换格式,类似于Hadoop中的其他列式存储格式,如RCFile和ORC。

Parquet与CSV的比较

与简单的CSV格式相比,Parquet在存储和处理大数据集时具有明显优势:

  • 存储效率:Parquet在云存储上的需求比CSV小得多。
  • 查询性能:Parquet的查询速度远高于CSV,特别是在处理大数据时。
  • 成本节约:使用Parquet可以大幅降低存储和数据扫描成本。
数据集Amazon S3大小查询时间数据扫描量成本
CSV格式数据1 TB236秒1.15 TB$5.75
Parquet格式数据130 GB6.78秒2.51 GB$0.01
节省87%34倍更快99%99.7%

Parquet的优势

  • 适用于各种大数据存储:适用于存储各种类型的大数据(结构化数据表、图像、视频、文档)。
  • 节省云存储空间:通过高效的列式压缩和灵活的编码方案,显著节省云存储空间。
  • 提高数据吞吐量和性能:使用数据跳过等技术,只读取需要的列,减少I/O,提升查询性能。
  • 优化复杂数据处理:支持复杂数据结构,适合处理大批量数据,提供高效的数据压缩和编码。

列式存储的优势

  • 查询效率:与行式存储(如CSV)相比,列式存储可以快速跳过无关数据,显著减少聚合查询时间。
  • 压缩效率:列式存储支持灵活的压缩选项和高效编码方案,使查询更快,数据压缩更高效。不同的数据文件可以以不同的方式压缩。
  • 支持复杂查询:Apache Parquet是从底层构建的,支持高级嵌套数据结构,优化大型数据处理,特别是处理GB级别数据文件的查询。
  • 兼容多种技术:适用于AWS Athena、Amazon Redshift Spectrum、Google BigQuery等交互和无服务器技术。

应用场景

  1. 大数据处理:Parquet格式在大数据处理和分析场景中非常流行,特别是在使用Apache Spark和Hadoop等工具时。
  2. 数据仓库:由于其高效的存储和读取性能,Parquet常用于数据仓库中,以支持快速的查询和分析。
  3. 数据传输和存储:Parquet格式非常适合用作长期数据存储格式,同时也便于在不同系统之间传输。

Parquet用法介绍

安装必要的库

首先,需要安装Pandas和PyArrow库。如果尚未安装,可以使用以下命令安装:

pip install pandas
pip install pyarrow

创建和读取Parquet文件(df转Parquet)

以下是一个简单的示例,把一个Dataframe写入Parquet文件中:

import pandas as pd# 创建数据
data = {'A': [1, 2, 3, 4, 5],'B': ['a', 'b', 'c', 'd', 'e'],'C': [1.1, 2.2, 3.3, 4.4, 5.5]
}
df = pd.DataFrame(data)# 写入parquet文件
df.to_parquet('data.parquet', engine='pyarrow')

此时会生成一个名为data.parquet的文件。

# 读取parquet文件
df = pd.read_parquet('data.parquet', engine='pyarrow')# 打印前五行数据
print(df.head())

读取CSV并转换为Parquet

以下是一个简单的示例代码,演示如何将CSV文件转换为Parquet格式:

import pandas as pd# 读取CSV文件
csv_file_path = 'data.csv'
df = pd.read_csv(csv_file_path)# 将数据写入Parquet格式
parquet_file_path = 'data.parquet'
df.to_parquet(parquet_file_path, engine='pyarrow')

在上述代码中,我们首先使用pd.read_csv函数读取CSV文件,然后使用df.to_parquet函数将DataFrame保存为Parquet格式文件。

将大型CSV文件转换成Parquet格式

这个脚本的工作流程如下:

  1. 使用 pandas.read_csv 逐块读取CSV文件,块大小由 chunksize 参数决定。
  2. 将每块数据转换为Apache Arrow的Table。
  3. 使用 ParquetWriter 将每块数据写入Parquet文件。
import pandas as pd 
import pyarrow as pa 
import pyarrow.parquet as pq# 定义读取CSV文件的块大小
chunksize = 10**6  # 每次读取100万行csv_file = 'data.csv'
parquet_file = 'large_file.parquet'# 使用pandas逐块读取CSV文件
reader = pd.read_csv(csv_file, chunksize=chunksize)# 读取第一块数据以确定schema
first_chunk = next(reader)
table = pa.Table.from_pandas(first_chunk)# 打开一个新的Parquet文件以写入,并设置schema
with pq.ParquetWriter(parquet_file, table.schema) as writer:writer.write_table(table)# 继续处理剩余的块for i, chunk in enumerate(reader, start=1):print(f'Processing chunk {i}...')table = pa.Table.from_pandas(chunk)writer.write_table(table)print('CSV to Parquet conversion completed.')

注意:根据具体情况调整 chunksize 的大小,以平衡内存使用和I/O性能。

总结

通过使用Pandas和PyArrow等库,可以方便地将CSV文件转换为Parquet格式,并读取Parquet文件以进行数据操作。特别是在大规模数据分析和存储的应用中,了解和使用Parquet格式可以显著提高数据处理的效率和性能。

参考链接

  • What is Parquet?
  • pyarrow · PyPI
  • Installing PyArrow — Apache Arrow v16.1.0

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROS | 自动导航

保存&加载地图: image:地图文件 resolution:地图分辨率(珊格地图) origin:地图左下标 第三个参数是偏转角度 加载创建好的yaml文件: 年轻人第一次导航: 全局规划器: 代价地图设置参数&#…

K-means聚类模型入门介绍

K-means聚类是一种无监督学习方法,广泛应用于数据挖掘、机器学习和模式识别等领域,用于将数据集划分为K个簇(cluster),其中每个簇的数据具有相似的特征。其基本思想是通过迭代寻找使簇内点间距离平方和最小的簇划分方式…

K8S-pod资源 探针

一.pod资源限制: 对pod资源限制原因:高并发占用所有的cpu资源、内存资源、会造成雪崩 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小,以及其他类型的资源。 方式: 对pod做…

UML-系统架构师(二)

1、UML(Unified Modeling Language)是面向对象设计的建设工具,独立于任何具体程序设计语言,以下()不属于UML中的模型。 A用例图 B协作图 C活动图 DPAD图 解析: UML一共14种图 结构图&…

【蓝桥杯——物联网设计与开发】拓展模块2 - 电位器模块

一、电位器模块 (1)资源介绍 🔅原理图 蓝桥杯物联网竞赛实训平台提供了一个拓展接口 CN2,所有拓展模块均可直接安装在 Lora 终端上使用; 图1 拓展接口 电位器模块电路原理图如下所示: 图2 …

python数据分析——apply 2

参考资料:活用pandas库 1、向量化函数 使用apply时,可以按行或按列应用函数。如果想应用自定义的函数,必须重写它,因为整列或整行传递到了函数的第一个参数中。可以利用向量化函数和装饰器对所有函数进行向量化。对代码进行向量化…

再论任何图≌自己这一几何最最起码常识推翻平面公理

黄小宁 有了解析几何使人类对直线和射线的认识有革命性的飞跃。几何学有史2300年来一直认定起点和射出的方向都相同的射线必重合,任两异射线必有全等关系;解析几何使我发现这是2300年肉眼直观错觉。 h定理(参考文献中的定理)&am…

台式机安装ubuntu过程

1.单系统参考 20231210-超详细Ubuntu20.04单系统安装_台式机安装ubuntu系统-CSDN博客 2.双系统参考 双系统启动效果_哔哩哔哩_bilibili 安装前一定要先清空电脑的硬盘数据,不然可能会出现以下图片异常 意思估计是分区被占用了,出现这个问题 &#xff0…

安全基础二

一、插件漏洞 统计使用了哪些插件这些插件有版本更新嘛检测这些插件是否存在已知漏洞 二、权限提升和持久化 SSRF(Server-Side Request Forgery,服务器端请求伪造) 想象一下,你是一个公司的内部员工(服务器&#x…

知攻善防应急响应靶机训练-Web2

前言: 本次应急响应靶机采用的是知攻善防实验室的Web-2应急响应靶机 靶机下载地址为: https://pan.quark.cn/s/4b6dffd0c51a 相关账户密码 用户:administrator 密码:Zgsfqq.com 解题过程: 一、攻击者的IP地址(两个)…

防火墙基础基础篇:NAT转发功能之——Easy IP方式详解

防火墙基础基础篇:NAT转发功能之——Easy IP方式详解 1. 概念 Easy IP 是一种简化版的动态NAPT(Network Address and Port Translation)技术。在Easy IP中,我们只使用一个公网IP地址,无需建立公有IP地址池。这个公网…

2024 年科技裁员综合清单

推荐阅读: 独立国家的共同财富 美国千禧一代的收入低于父辈 创造大量就业机会却毁掉了财富 这四件事是创造国家财富的关键 全球财富报告证实联盟自始至终无能 美国人已陷入无休止债务循环中,这正在耗尽他们的财务生命 2024 年,科技行业…

基于Java的高校学生勤工助学优派系统的设计与实现(论文+源码)_kaic

摘 要 高校勤工助学管理系统的出现,让学生的工作更加标准,不仅仅使高校办公室的办公水平以及管理水平大大提高,还优化了勤工助学资金的使用方式方法,完善了资助所需费用的资源配置,可以卓有成效地缩减学校的管理经费。本系统主…

《python编程从入门到实践》day40

# 昨日知识点回顾 编辑条目及创建用户账户 暂没能解决bug: The view learning_logs.views.edit_entry didnt return an HttpResponse object. It returned None instead.# 今日知识点学习 19.2.5 注销 提供让用户注销的途径 1.在base.html中添加注销链接 …

esp8266的rtos和nonos区别

https://bbs.espressif.com/viewtopic.php?t75242#p100294 https://blog.csdn.net/ydogg/article/details/72598752

Akamai 最新版逆向分析 akamai逆向 dhl网址

原创文章,请勿转载! 本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。 URL(base64加密处理):aHR0cHM6Ly93d3cuZGhsLmNvbS9jbi16aC9ob21lL3RyYWNraW5nL3RyYWNraW5nLWVjb21tZXJ…

Java | Leetcode Java题解之第115题不同的子序列

题目&#xff1a; 题解&#xff1a; class Solution {public int numDistinct(String s, String t) {int m s.length(), n t.length();if (m < n) {return 0;}int[][] dp new int[m 1][n 1];for (int i 0; i < m; i) {dp[i][n] 1;}for (int i m - 1; i > 0; …

计算机网络路由协议之内部网关协议RIP例题与详解

互联网的路由选择协议 路由器转发表的路由协议如何得出呢&#xff1f; 使用路由算法进行&#xff0c;路由算法可以分为两类&#xff1a; 静态路由选择策略和动态路由选择策略。 静态路由选择策略&#xff1a; 非自适应路由选择&#xff0c;人工配置每一条路由。 动态路由选…

图解 Transformer

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

安装ROS 2 Jazzy Jalisco

参考&#xff1a; https://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debians.html 先要安装一个ubuntu&#xff0c;对老旧硬件最友好的版本Lubuntu&#xff1a; 安装Lubuntu24.04-CSDN博客 过程&#xff1a; 按文档一步步走下去&#xff1a; 遇到问题查找通用案…