1. 项目场景:
MacOS
Pandas
Jupyter Notebook
在做一个有大规模数据集的医疗类分类项目时,特征(Feature)
部分由两组Parquet文件
组成,每组各有10w+个Parquet文件
。
主要环境要求共2点,如下:
- 操作系统:
MacOS
- 需要的Python库:
Pandas
Numpy
Pyarrow
Fastparquet
glob
,其中,Pyarrow
Fastparquet
不需要import,只需要在终端:
pip install Pyarrow
以及
pip install fastparquet
之后,在Jupyter Notebook
中
import panda as pd
pd.read_parquet(file_path) # file_path: 文件目录
即可。
2. 问题描述
提示:这里描述项目中遇到的问题:
由于初次见这个类型的文件,尝试了解它的原理,在阅读了各种对这个类型的文件的结构分析后决定(根本没耐心仔细看)猜测也许能够用类似Pandas
read_csv()
的方法来批量读取这坨数据,因此本文首先尝试了单纯的Pandas
pd.read_parquet()
方法来读取单个文件。结果表明,猜测成立。但当在For循环中尝试使用这个方法来一口气读取10w个Parquet
文件时,会发现速度非常的慢,但是在等待运行结果的过程中也有可能会怀疑这个方法的正确性而直接掐断它的运行寻求新的、已经被证明是正确且快速的方法(但是赶时间的时候可能突然智商下线然后看不懂最后还得用最土的方法)。
本文将尝试两种方法在10w条数据,每条数据包含超过20w个数据的数据集上的效果,统计他们耗费的时间来评估他们的速度。
3. 实验细节:
这一部分将先展示测试的两种方法并附上结果,之后将在方法二的结果之后分析方法二中的一些
import time
start_time = time.time() # 记录开始时间 【1】
# eegDataForTraining 是一个List
# eegDataForTraining是由10w个元组组成的列表
# 其中的每一个元组有两个元素,第一个元素是对应parquet文件的文件编号数据类型是Int.第二个元素在本文中没有用到,忽略它就可以了。
for i in range(len(eegDataForTraining)):
# str2 是用来临时存放文件的一个变量
# 10w个文件所在的文件夹的名称
str2 = 'foldername/'
# 获得文件夹