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

news2024/11/18 3:42:41

在这里插入图片描述

前言

在大数据时代,数据存储和处理的效率越来越重要。同时,我们在工作中处理的数据也越来越多,从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.coloradmin.cn/o/1683972.html

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

相关文章

视频监控管理平台LntonCVS监控视频汇聚融合云平台主要功能应用场景介绍

随着网络技术的不断发展和万物互联时代的到来,视频融合在一些系统集成项目及综合管理应用中变得日益重要。本文以LntonCVS视频融合云平台为案例,探讨视频融合的对象及其应用场景。 1. 视频监控设备 视频监控摄像设备是各种视频应用项目的基础部分。在视…

互联网医院系统|HIS系统开发|互联网医院HIS系统

互联网医院结合互联网技术与医疗服务,提供诊疗、处方、药品配送等服务。开发涉及需求分析、系统设计、核心技术实现、开发与测试、部署与运维等环节,确保系统安全、高效、易用,提供优质医疗。下面小编就给大家讲解下互联网医院开发优势。 1、…

聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用

哈喽大家好,我是咸鱼。 最近写的一个 Python 项目用到了 jwcrypto 这个库,这个库是专门用来处理 JWT 的,JWT 全称是 JSON Web Token ,JSON 格式的 Token。 今天就来简单入门一下 JWT。 官方介绍:https://jwt.io/intr…

深度学习 --- stanford cs231 编程作业(如何在chrome中安装colab)

stanford cs231 编程作业(如何开始你的colab编程) 斯坦福231n的所有作业都要求在colab里面做,colab可以为你提供免费的云计算。实际上在他的官网中也有关于如何安装colab的详细说明视频。 https://youtu.be/DsGd2e9JNH4https://youtu.be/DsGd2e9JNH4 我…

一顿五元钱的午餐

在郑州喧嚣的城市一隅,藏着一段鲜为人知的真实的故事。 故事的主角是一位年过半百的父亲,一位平凡而又伟大的劳动者。岁月在他脸上刻下了深深的痕迹,但他眼神中闪烁着不屈与坚韧。 他今年52岁,为了给远在家乡的孩子们一个更好的…

Springboot+Vue项目-基于Java+MySQL的游戏交易系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

计算机精选期刊特辑

文章目录 一、征稿简介二、合作期刊三、投稿咨询四、咨询 一、征稿简介 艾思科蓝依托互联网信息与数据库技术、整合渠道与合作资源,提供EI/SCI/SCIE/SSCI期刊论文的内容审查、发表支持等服务。艾思科蓝与多所知名出版社达成战略合作关系,持续开展合作征…

社群裂变新趋势:哪些企业正在领跑市场?

在数字化时代,社群裂变已成为企业快速增长、扩大市场份额的重要策略。那么,哪些企业正在领跑这一新趋势,通过社群裂变实现品牌与市场的双赢呢? 首先,不得不提的是那些深耕私域领域多年的企业。这些企业通过长期的用户运…

民国漫画杂志《时代漫画》第15期.PDF

时代漫画15.PDF: https://url03.ctfile.com/f/1779803-1247458444-8befd8?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络!

打造高效安全新标杆:智慧楼宇视频智能管理系统的建设探索

大数据、人工智能、5G等技术在城市中的不同应用也让人们看到了数字化和智能化技术赋予城市管理的巨大潜力,为更多城市数字化应用场景的发展带来机遇。在新基建的大背景下,人工智能、物联网等先进技术与基础设施的深度融合,将大力推进电网、楼…

Mongodb介绍及springboot集成增删改查

文章目录 1. MongoDB相关概念1.1 业务应用场景1.2 MongoDB简介1.3 体系结构1.4 数据模型1.5 MongoDB的特点 2. docker安装mongodb3. springboot集成3.1 文件结构3.2 增删改查3.2.1 增加insert3.2.2 保存save3.2.3 更新update3.2.4 查询3.2.5 删除 1. MongoDB相关概念 1.1 业务…

Linux系统查看GPU型号的实战教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

DolphinScheduler 3.3.0版本更新一览

Apache DolphinScheduler即将迎来3.3.0版本的发布,届时将有一系列重要的更新和改进。在近期的社区5月份用户线上分享会上,项目PMC 阮文俊为大家介绍了3.3.0版本将带来的主要更新和改进,并为大家指出了如何参与社区的方式。 什么是DolphinSch…

Golang创建文件夹

方法 package zdpgo_fileimport ("os" )// AddDir 创建文件夹 func AddDir(dir string) error {if !IsExist(dir) {return os.MkdirAll(dir, os.ModePerm)}return nil }测试 package zdpgo_fileimport "testing"func TestAddDir(t *testing.T) {data : […

Baxter机器人摄像头打不开的一个可能的解决办法

操作过程 1.连上机器人 cd ros_ws/ ./baxter.sh2.查看摄像头(最多开两个) rosrun baxter_tools camera_control.py -l 3.打开指定的摄像头 rosrun baxter_tools camera_control.py -o left_hand_camera -r 1280x800 另:关闭的话 rosrun…

网络安全快速入门(十四)Linux输出重定向及通配符

14.1 前言 在我们了解网络之后,接下来我们来了解一下Linux的输出重定向及通配符,以便更快捷地去执行Linux的基础命令!话不多说,我们开始今天的学习内容吧。 14.2 输出重定向 输出重定向,本质上就是将本该显示在终端上…

04. Redis 配置文件

文章目录 单位包含网络 NETWORK通用 GENERAL快照 SNAPSHOTTING主从复制 REPLICATION安全 SECURITY客户端 CLIENTS内存设置 MEMORY MANAGEMENTAPPEND ONLY MODE 模式(aof 的配置) 单位 配置文件对大小写不敏感(unit单位)。 包含 …

数据库操作(函数)

函数是一段可以直接被另外一段程序调用的程序或代码 一。字符串函数 1.concat(s1,s1....sn):字符串拼接,将s1,s2,sn拼接为一个字符串 例如: select concat("hello","world"); 2.lower(str&…

java版本ERP管理系统源码 Spring Cloud ERP系统-生产型企业erp系

在当今数字化浪潮的推动下,企业对于高效、稳定且易于扩展的管理系统需求日益增长。为了满足这一需求,我们精心打造了一款基于Java技术的鸿鹄ERP(Enterprise Resource Planning)管理系统。该系统充分利用了Spring Cloud Alibaba、S…

《Effective Objective-C 2.0》读书笔记——对象、消息、运行期

目录 第二章:对象、消息、运行期第6条:理解“属性”这一概念第7条:在对象内部尽量直接访问实例变量第8条:理解“对象等同性”这一概念第9条:以“类族模式”隐藏实现细节第10条:在既有类中使用关联对象存放自…