parquet文件数据格式介绍以及python pandas对parquet常见操作

Parquet 文件数据格式简介

Parquet 是一种开源的列式存储格式,最初由 Apache Hadoop 项目中的 Apache Hive 和 Apache Drill 开发,后被广泛应用于大数据处理和分析。Parquet 格式的特点使其特别适合大规模的数据分析工作,尤其是在分布式计算系统中,如 Apache Spark 和 Apache Hive。

Parquet 的特点:
  1. 列式存储

    • 数据按照列而不是行的方式进行存储。这意味着,当你只需要查询某些列的数据时,Parquet 格式比传统的行式存储(如 CSV 或 JSON)更高效。
    • 列式存储使得数据压缩效果更加显著,减少了磁盘空间的占用。
  2. 高效的压缩

    • Parquet 格式使用了高效的数据压缩算法,如 SnappyGZIPLZO,以减少存储空间和 I/O 操作。
  3. 支持复杂数据类型

    • Parquet 格式支持嵌套数据结构,如数组、映射和结构体,这使得它非常适合存储复杂的数据集。
  4. 跨平台和跨语言支持

    • Parquet 是一个开源的格式,支持多种语言的库,如 Python、Java、C++、Scala 等。
    • 它可以与多种大数据工具兼容,如 Hadoop、Spark、Hive 和 Impala。
  5. schema 支持

    • 每个 Parquet 文件都包含一个 schema,描述了数据的结构。这使得在读取时不需要额外的解析工作,可以直接进行高效的数据读取。
使用场景:
  • 适用于大规模数据存储和处理,特别是在分布式计算和分析中。
  • 常见于数据仓库、大数据平台(如 Hadoop、Spark)和云存储系统。

Python 中使用 pandas 处理 Parquet 文件

Python 中的 pandas 库与 Parquet 文件的交互非常简便,通常通过 pyarrowfastparquet 作为引擎来进行读写操作。

1. 安装依赖

首先需要安装 pandas 和用于读取/写入 Parquet 格式的引擎。你可以选择 pyarrowfastparquet 作为引擎。

pip install pandas pyarrow fastparquet
2. 读取 Parquet 文件

pandas 提供了 read_parquet() 函数来读取 Parquet 文件。你可以指定使用 pyarrowfastparquet 作为引擎。

import pandas as pd# 读取 Parquet 文件(使用 pyarrow 或 fastparquet 引擎)
df = pd.read_parquet('file.parquet', engine='pyarrow')

如果没有指定 engine 参数,pandas 会自动选择可用的引擎。

3. 写入 Parquet 文件

同样地,pandas 提供了 to_parquet() 方法,可以将 DataFrame 数据写入 Parquet 文件:

df.to_parquet('output_file.parquet', engine='pyarrow')

默认情况下,pandas 使用 pyarrow,但也可以通过 engine 参数选择 fastparquet

4. Parquet 文件的压缩设置

在写入 Parquet 文件时,可以选择不同的压缩算法以优化存储空间。例如,使用 snappy 压缩:

df.to_parquet('output_file.parquet', engine='pyarrow', compression='snappy')

常见的压缩格式有:

  • snappy(默认的压缩格式)
  • gzip
  • brotli
  • lz4
  • zstd
5. 读取 Parquet 文件的部分列

在读取 Parquet 文件时,可以选择只加载某些列,这样可以提高读取速度并减少内存消耗:

df = pd.read_parquet('file.parquet', columns=['col1', 'col2'], engine='pyarrow')
6. 处理 Parquet 文件中的复杂数据类型

由于 Parquet 支持嵌套数据结构(如数组、嵌套结构等),因此在读取时,如果数据包含复杂类型,pandas 会自动将其转换为合适的格式,通常会以 object 类型存储嵌套的数据。如果需要,可以使用 json_normalize() 或类似的技术将嵌套的数据展开为平坦的表格形式。

# 假设 Parquet 文件中包含嵌套数据,读取后可以使用 json_normalize 展开
from pandas import json_normalize
df = pd.read_parquet('nested_file.parquet', engine='pyarrow')
df_flat = json_normalize(df['nested_column'])
7. 读取大文件时的性能优化

如果处理的数据集非常大,可以通过 chunksize 参数分块读取文件,减少内存的使用:

chunk_size = 100000
for chunk in pd.read_parquet('large_file.parquet', engine='pyarrow', chunksize=chunk_size):process(chunk)  # 处理每个数据块
8. 使用 Parquet 文件作为数据库的数据交换格式

Parquet 文件也常用于大数据平台和数据库间的数据交换格式。例如,可以将 Parquet 文件从数据库中导出,供其他系统或用户进行分析。

# 假设你使用 Spark 或其他大数据工具导出 Parquet 文件,之后可以用 pandas 读取
df = pd.read_parquet('data_from_spark.parquet', engine='pyarrow')

总结

Parquet 文件格式是一种高效、适用于大数据处理的列式存储格式,广泛应用于数据仓库和分布式计算系统中。通过 pandaspyarrowfastparquet 引擎的结合,处理 Parquet 文件变得非常简便。无论是读写操作、压缩设置、复杂数据类型的处理,还是优化大数据的性能,pandas 都提供了强大的功能,帮助用户高效地管理和操作 Parquet 格式的数据。

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

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

相关文章

禁用div的写法(自定义disabled)Vue3

因为div 元素本身没有 disabled 属性,所以需要根据JavaScript中的变量、通过动态绑定 class (Vue的:class)来改变样式。 需要一个变量 isDivDisabled import { ref } from vue; let isDivDisabled ref(false);当 isDivDisabled true &…

大模型系列——旋转位置编码和长度外推

绝对位置编码 旋转位置编码 论文中有个很直观的图片展示了旋转变换的过程: 对于“我”对应的d维向量, 拆分成d/2组以后,每组对应一个角度,若1对应的向量为(x1,x2),应用旋转位置编码,相当于这个分量旋转了m…

路径规划 | 基于极光PLO优化算法的三维路径规划Matlab程序

效果一览 基本介绍 研究内容 极光优化算法(PLO)的深入理解: 研究极光优化算法的基本原理,包括模拟带电粒子在地球磁场中的旋转运动、极光椭圆区域内的行走以及粒子间的碰撞等。 分析PLO算法的全局搜索能力和局部开发能力&#xf…

MATLAB画柱状图

一、代码 clear; clc; figure(position,[150,100,900,550])%确定图片的位置和大小,[x y width height] %准备数据 Y1[0.53,7.9,8.3;0.52,6.8,9.2;0.52,5.9,8.6;2.8,5.8,7.9;3.9,5.2,7.8;1.8,5.8,8.4]; % withoutNHC X11:6; %画出4组柱状图,宽度1 h1…

[实用指南]如何将视频从iPhone传输到iPad

概括 将视频从 iPhone 传输到 iPad 时遇到问题?您可能知道一种方法,但不知道如何操作。此外,您要传输的视频越大,完成任务就越困难。那么如何将视频从 iPhone 传输到 iPad,特别是当您需要发送大视频文件时&#xff1f…

Git命令行的使用

目录 一、什么是Git 1、本地仓库 vs 远端仓库 本地仓库 远端仓库 2、.git vs .gitignore .git .gitignore 二、使用Git命令 1、安装git 2、git首次使用需要配置用户邮箱和用户名 3、上传目录/文件到远端仓库步骤 1)创建放置文件的目录 2)cd…

黑马JavaWeb开发跟学(十五).Maven高级

黑马JavaWeb开发跟学.十五.Maven高级 Maven高级1. 分模块设计与开发1.1 介绍1.2 实践1.2.1 分析1.2.2 实现 1.3 总结 2. 继承与聚合2.1 继承2.1.1 继承关系2.1.1.1 思路分析2.1.1.2 实现 2.1.2 版本锁定2.1.2.1 场景2.1.2.2 介绍2.1.2.3 实现2.1.2.4 属性配置 2.2 聚合2.2.1 介…

十二、Vue 路由

文章目录 一、简介二、安装与基本配置安装 Vue Router创建路由实例在应用中使用路由实例三、路由组件与视图路由组件的定义与使用四、动态路由动态路由参数的定义与获取动态路由的应用场景五、嵌套路由嵌套路由的概念与配置嵌套路由的应用场景六、路由导航<router - link>…

AE RFG 1251 Generator User Manual

AE RFG 1251 Generator User Manual

vue2、element的el-select 选项框的宽度设置、文本过长问题

<el-select v-model"value" placeholder"请选择"><el-optionv-for"item in cities":key"item.value":label"item.label":value"item.value"><el-tooltip class"item" :content"ite…

【Matlab算法】基于改进人工势场法的移动机器人路径规划研究(附MATLAB完整代码)

基于改进人工势场法的移动机器人路径规划研究 结果图摘要1. 引言2. 方法说明2.1 基本原理2.2 改进策略3. 核心函数解释3.1 改进的斥力计算函数3.2 路径规划主函数4. 实验设计4.1 实验环境设置4.2 关键参数选择5. 结果分析5.1 实验结果5.2 性能分析附录:完整代码参考文献结果图…

【MySQL】--- 内置函数

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; MySQL &#x1f3e0; 时间函数 约定&#xff1a;我们在MySQL中说的日期指的是年 月 日&#xff0c;时间指的是时 分 秒。 &#x1f9f7; now() select n…

springboot和vue项目前后端交互

java后端开发常用springboot框架&#xff0c;开发简单不繁琐&#xff0c;容易上手。简简单单配置好一些配置项&#xff0c;整个web项目就能运行起来了。vue前端也是比较流行的前端开发框架&#xff0c;写起来简单&#xff0c;组件也丰富&#xff0c;参考资料多。 这期就应薯薯…

酒店管理系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

OkHttp接口自动化测试

文章目录 java环境搭建OkHttp之getOkHttp之POSTPOST发送From表单POST发送jsonPOST上传文件 OkHttp之deleteOkHttp之put java环境搭建 引入依赖 <!--okhttp3--><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</art…

分数阶傅里叶变换代码 MATLAB实现

function Faf myfrft(f, a) %分数阶傅里叶变换函数 %输入参数&#xff1a; %f&#xff1a;原始信号 %a&#xff1a;阶数 %输出结果&#xff1a; %原始信号的a阶傅里叶变换N length(f);%总采样点数 shft rem((0:N-1)fix(N/2),N)1;%此项等同于fftshift(1:N)&#xff0c;起到翻…

【Rust练习】26.Package and Crate

练习题来自&#xff1a;https://practice-zh.course.rs/crate-module/crate.html 建议在命令行下操作完成本节内容&#xff0c;Windows 11/10 首选 Windows 终端&#xff0c;好看&#xff0c;支持渲染中文字体&#xff0c;缺点是功能太少了&#xff1b;其次推荐 mobaxterm&…

Python实现接口签名调用

目录: 1、第三方接口签名调用2、调用结果 1、第三方接口签名调用 import json import requests import hashlib import time import hmac access_key xxxxxxxxxxxxxxx secret_key xxxxxxxxxxxxxxx # 应用信息 def _wps4_sig(method, url, date, body): print(body)if bod…

df.replace({‘b‘: r‘\s*(\.)\s*‘}, {‘b‘: r‘\1ty‘}, regex=True)

这段代码 df.replace({b: r\s*(\.)\s*}, {b: r\1ty}, regexTrue) 用于在 DataFrame 中进行替换操作&#xff0c;具体来说是针对 b 列&#xff0c;匹配并替换符合正则表达式的值。 详细解析&#xff1a; df.replace()&#xff1a;这是 Pandas 中的 replace() 方法&#xff0c;用…

js的一些处理

1.翻转字符串 let str abcdef str str.split().reverse().join() console.log(str) 因此想到了我之前写的截取字符串获取参数跳转&#xff0c;在写一遍 let str nameJack&age18&gender男 let list str.split(&); let obj {} list.forEach((v)>{ …