数据分析中常见的存储方式

article/2025/9/16 6:32:25

点击上方“大话coding”,选择“星标”公众号

重磅干货,第一时间送达


大家好,我是小轩

这两天整理了在数据分析中常见的5种存储格式

内容比较多,只是简要整理,仅供大家学习和选择bc0e1c41f89457cb416a22e8d1278919.png

后面会对使用到的数据存储方式进行详细介绍7dacab52ade78ddb5617cee5b4d73bc1.png

目录
  • csv / txt / json

  • hdf

  • npy / npz / memmap

  • joblib

  • sequenceFile

  • Avro

  • Parquet

  • Orc

csv / txt / json 

TXT文本储存:

方便,但不利于检索

CSV(逗号分隔值)是一种纯文本文件格式,用于存储表格数据(例如电子表格或数据库)

文件的每一行都称为记录。

JSON文件储存:

   结构化程度非常高

对象和数组:

   一切都是对象

对象:

使用{}包裹起来的内容,
{key1:value1, key2:value2, …} 
类似于python中的字典

数组: 

使用[]包裹起来的内容[“java”, “javascript”, “vb”, …]

hdf 

HDF 是用于存储和分发科学数据的一种自我描述、多对象文件格式。

185a6d87aa95f14f069a375a330a9211.png

为什么创建HDF?

在不同的机器上生成和处理数据文件,各式各样的软件包被用来多种处理文件,同时也与其他使用不同机器和软件的人共享数据文件,这些文件也许包含不同类型的信息,这些文件也许概念上有关但在实质上却不同。HDF就是为了解决这些问题诞生的。

npy / npz / memmap

说到这三个,就必须了解NumPy

什么是NumPy呢?

00af695b132809c607cd7a9ed7e1fe83.png

NumPy是一个功能强大的Python库,可以帮助程序员轻松地进行数值计算。

numpy专用的二进制类型:npy和npz

如果将特征和数据处理为Numpy格式,则可以考虑存储为Numpy中的npy或npz格式。

存储类型:矩阵

读取速度:较快

使用场景:文件存储

npy文件:

以二进制的方式存储文件,在二进制文件第一行以文本形式保存了数据的元信息(ndim,dtype,shape等),可以用二进制工具查看内容。

np.load()和np.save()是读写磁盘数组数据的两个重要函数。使用时数组会以未压缩的原始二进制格式保存在扩展名为.npy的文件中。

import numpy as nparr=np.arange(6)
np.save('wzx',arr)print(np.load('wzx.npy'))

npz文件:

以压缩打包的方式存储文件,可以用压缩软件解压。

使用np.savez()函数可以将多个数组保存到同一个文件中。读取.npz文件时使用np.load()函数,返回的是一个类似于字典的对象,因此可以通过数组名作为关键字对多个数组进行访问。

import numpy as npa = np.arange(5)
b = np.arange(6)
c = np.arange(7)
np.savez('wzx', a, b, c_array=c)  # c_array是数组c的命名data = np.load('wzx.npz')print('arr_0 : ', data['arr_0'])
print('arr_1 : ', data['arr_1'])
print('c_array : ', data['c_array'])

memmap

NumPy实现了一个类似于ndarray的memmap对象,它允许将大文件分成小段进行读写,而不是一次性将整个数组读入内存。

memmap也拥有跟普通数组一样的方法,因此,基本上只要是能用于ndarray的算法就也能用于memmap。

存储类型:矩阵

读取速度:适中

使用场景:大文件存储

import numpy as np
a = np.random.randint(0, 10, (3, 4), dtype=np.int32)
print(a)
a.tofile("haha.bin")
b = np.memmap("haha.bin", dtype=np.int32, shape=(3, 4))
print(b)
b[0, 0] = 100
del b  # 关闭文件,自动调用数组的finalize函数
b = np.memmap("haha.bin", dtype=np.int32, shape=(3, 4))
print(b)

joblib

Joblib是一组用于在Python中提供轻量级流水线的工具。

在训练模型后将模型保存的方法,以免下次重复训练。可以使用sklearn内部的joblib

joblib更适合大数据量的模型,且只能往硬盘存储,不能往字符串存储

from sklearn.externals import joblib
joblib.dump(clf,'filename.pkl')
clf=joblib.load('filename.pkl')
补充,也可以使用pickle
import pickle 
s=pickle.dumps(model) 
f=open("model.pkl",'w') 
f.write(s) 
f.close() 
f=open("model.pkl",'r') 
model=pickle.loads(f.read()) 
model.predict(X)

sequenceFile

什么是sequenceFile?

sequenceFile文件是Hadoop用来存储二进制形式的[Key,Value]对而设计的一种平面文件(Flat File)。

可以把SequenceFile当做是一个容器,把所有的文件打包到SequenceFile类中可以高效的对小文件进行存储和处理。

SequenceFile文件并不按照其存储的Key进行排序存储,SequenceFile的内部类Writer提供了append功能。

SequenceFile中的Key和Value可以是任意类型Writable或者是自定义Writable。

59fc00bf16ff13067252624a6e8979ea.png

相比于text格式的文件,SequenceFile可以存储key-value格式的消息,方便mapreduce引擎处理数据

支持record级别的压缩和block级别的压缩

文件是分块的,因此是可分割的。支持mapreduce的split输入

Avro

Avro的模式主要由JSON对象来表示,它可能会有一些特定的属性,用来描述某种类型(Type)的不同形式。

6db2c1a019e2130f468dd3af1b8b71d2.png

Avro支持八种基本类型(Primitive Type)和六种混合类型(Complex Type)。基本类型可以由JSON字符串来表示。每种不同的混合类型有不同的属性(Attribute)来定义,有些属性是必须的,有些是可选的,如果需要的话,可以用JSON数组来存放多个JSON对象定义。

Avro支持两种序列化编码方式:二进制编码和JSON编码。使用二进制编码会高效序列化,并且序列化后得到的结果会比较小;而JSON一般用于调试系统或是基于WEB的应用。

avro存储格式应用场景很多,比如hive、mongodb等

Parquet

Parquet是一个基于列式存储的文件格式,它将数据按列划分进行存储。Parquet官网上的文件格式介绍图:

050fe55fcd170e537904de70e53148dc.png

parquet应用场景也很多,比如hbase

Parquet 的存储模型主要由行组(Row Group)、列块(Column Chuck)、页(Page)组成。

行组,Row Group:Parquet 在水平方向上将数据划分为行组,默认行组大小与 HDFS Block 块大小对齐,Parquet 保证一个行组会被一个 Mapper 处理。

列块,Column Chunk:行组中每一列保存在一个列块中,一个列块具有相同的数据类型,不同的列块可以使用不同的压缩。

页,Page:Parquet 是页存储方式,每一个列块包含多个页,一个页是最小的编码的单位,同一列块的不同页可以使用不同的编码方式。

Orc

Orc也是一个列式存储格式,产生自Apache Hive,用于降低Hadoop数据存储空间和加速Hive查询速度。

55d1fcb40f1d9cb0bdf4261d163e7fc8.png

和Parquet的设计类似,也是将行分成多个组,然后组内按列存储,之后再对列进行分割。orc 的 Stripe 对应parquet的 Row Group,row Group 对应的是 parquet的 page

ORC文件是自描述的,它的元数据使用Protocol Buffers序列化

除了基本类型以外,还支持更复杂的数据结构,如LIST、STRUCT、MAP和UNION类型。

Parquet、Avro、ORC格式对比

相同点

1. 基于Hadoop文件系统优化出的存储结构

2. 提供高效的压缩
3. 二进制存储格式
4. 文件可分割,具有很强的伸缩性和并行处理能力
5. 使用schema进行自我描述
6. 属于线上格式,可以在Hadoop节点之间传递数据

不同点
1. 行式存储or列式存储:Parquet和ORC都以列的形式存储数据,而Avro以基于行的格式存储数据。就其本质而言,面向列的数据存储针对读取繁重的分析工作负载进行了优化,而基于行的数据库最适合于大量写入的事务性工作负载。
2. 压缩率:基于列的存储区Parquet和ORC提供的压缩率高于基于行的Avro格式。 
3. 可兼容的平台:ORC常用于Hive、Presto;Parquet常用于Impala、Drill、Spark、Arrow;Avro常用于Kafka、Druid。
4. 不同的案例和应用场景选择合适的存储格式,可以提升存储和读取的效率。


http://chatgpt.dhexx.cn/article/jBoTMMdV.shtml

相关文章

pip安装git

解决:Cannot find command ‘git’ - do you have ‘git’ installed and in your PATH?和系统找不到指定的文件。 while executing command git http:.// C:\Users\HASEE>pip install githttps://github.com/philferriere/cocoapi.git#subdirectoryPythonAPI C…

用pip安装pytorch

我这里用的名字叫 PyTorch 以下操作在Anaconda Prompt中操作 一、激活虚拟环境 conda activate PyTorch二、安装这三个whl 每一个的安装命令如下: pip install 【地址文件名】如果这里的【地址文件名】不知道如何写的话,选中whl文件,右键选…

pip 安装第三方库

pip 安装第三方库 1. 默认安装最新版本 pip install [package_name] 2. 指定模板版本安装 pip install [package_name]x.x.x 3. 指定最低版本安装 pip install [package_name]>x.x.x 4. 指定镜像源服务器地址安装 pip --proxy http://: install 5. 查看安装包列表 …

使用pip安装PyTorch

以python语言为例,在使用 "import torch" 时报错,发现根本没有安装PyTorch,赶紧百度PyTorch安装,出来一堆教程,大多都是需要conda啥啥啥的,小白(比如我)看的一脸懵逼(大佬们别笑了)。 其实&…

pip安装pytorch的方法

pip安装pytorch 1 登录pytorch官网生成安装链接2 执行命令3 检验是否安装成功4 说明 在网上看到的比较多的方法是用Anaconda安装,这里介绍用pip安装的方法。 1 登录pytorch官网生成安装链接 pytorch官网网址: https://pytorch.org/get-started/locall…

Pytorch(pip安装示例)

00、简单介绍: PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。 PyTorch提供的两个高级功能: GPU加速张量计算(如Numpy)动态神经网络,可自动求导,很灵活 1、我…

pip安装详解

pip是python的包管理工具,python2.7/python3.4以上的版本都已经集成了该工具,我们可以用 pip --version命令确认是否安装。如果未安装pip的,请往下看。 下载 进入https://pypi.org/project/pip/选择红框中的文件下载 图 windows下安装 下载完成后解压得到 我们用CMD进…

pip 安装jupyter notebook

一、打开cmd 快捷键winxa 二、输入 pip install jupyter 等待下载完成(一两分钟) 三、配置jupyter notebook打开路径 jupyter notebook --generate-config 四、找到文件所在位置 就是上图to的位置,查找 c.NotebookApp.notebook_dir 键…

pip安装及matplotlib安装

1、pip安装 首先,找到安装python的文件夹,接着打开文件夹里的Scripts文件夹,打开Scripts文件夹并复制该路径。如下图: 右键单机此电脑图标,点击属性,找到高级系统设置。如下图: 点击其中的环境…

pip安装mediapipe报错

1.刚开始安装报错 解决一: 上网搜索后,有博主说是镜像错误的原因,可以用阿里或其他镜像下载,我运行后还报上面的错误 具体解决办法可以看这个博主的https://blog.csdn.net/qq591840685/article/details/116399374 2.然后还有个…

pip安装python第三方库的四种方法

文章目录 一、无镜像安装二、镜像安装三、一劳永逸式镜像安装四、批量安装总结 一、无镜像安装 pip install 库名 打开命令提示符【win r】,输入cmd,在命令提示窗口输入pip install 库名, 再点击回车键【Enter】,就可以安装。当安装成功时&…

pip环境的安装

pip环境的安装配置 注:在进行安装的前提是机器上存在python的环境并能通过cmd命令行进行运行 下载pip的压缩包,并进行解压 在windows系统之中通过cmd命令行的形式将路径移动到pip解压的文件夹的目录之下。 python setup.py install注:set…

pip安装教程 python(针对于Windows系统)

1.什么是pip pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。 目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具。 pip 官网:https://pypi.org/project/pip/ 2.判断本机是否安装p…

pip安装教程

pip不是内部或外部命令,也不是可运行的程序或批处理文件 第一步:确定python已安装第二步:下载pip第三步:安装pip可能的问题:python setup.py install没反应 电脑里面没有安装pip,那么 在cmd中运行会提示:pip不是内部或…

新手Python环境配置以及pip安装教程

介于我在安装pip的时候,查资料仍然解决不了自己问题的情况下,统一整理了一下pip安装流程(只针对windows用户): 目录 1.介绍 2.检查python和pip的环境 3.下载pip 3.1方法一 3.2方法二 4.pip扩展 1.介绍 pip 是 …

一分钟学会Python中pip的安装与使用

文章目录 一、简单介绍二、下载安装三、最常用命令1、显示版本和路径2、获取帮助3、升级 pip4、安装包5、升级包6、卸载包7、搜索包8、显示安装包信息9、列出已安装的包10、查看指定包的详细信息 一、简单介绍 pip 是 Python 包管理工具,该工具提供了对Python 包的…

jlink接口定义(jlink接口定义 swd4线)

搜狗问问-搜狗旗下最大互动问答社区 搜狗问问-搜狗旗下最大互动问答社区

主存与CPU的连接(字扩展,位扩展,芯片的地址分配)

主存与CPU的连接(字扩展,位扩展,芯片的地址分配) 废话不多说,直接上主题(在文章最后,留了一个例题,个人提供了答案和解析) 主存储器容量的扩充时所需的芯片数量 位扩展…

Jtag Jlink Swd 区别

stm系列下载方式: stm8 swim(4线)下载模式 stm32 swd(4线)下载模式 1)Jlink一款调试ARM CPU的调试设备,JTAG和swd是该设备调试CPU的两种工作方式; 两种方式的调试效果差不多&#x…

stm32芯片被锁,使用jlink就能轻轻松松解锁

如果一不小心将stm32开发板的芯片给锁了,那原因可能是忽略了一个比较低级的问题,就是将stm32中的一些不能独立使用的IO口给了高电平,stm32中有很多口是不能独立使用的,如图(以stm32103rct6 正点原子的mini板为例&…