测试并解决10w个Parquet文件批量读取并使Jupyter Notebook 不罢工的问题

在处理大规模Parquet文件时,遇到Jupyter Notebook性能问题。尝试了两种方法:直接在for循环中读取和使用glob库。实验表明,使用glob库的方法显著提高速度,尤其是在大量文件读取时。解决方案是采用 glob 库结合 pandas 读取,避免了在循环中多次处理文件名,从而提升了效率。
摘要由CSDN通过智能技术生成

1. 项目场景:

MacOS Pandas Jupyter Notebook
在做一个有大规模数据集的医疗类分类项目时,特征(Feature)部分由两组Parquet文件组成,每组各有10w+个Parquet文件

阅读注意事项:如果你很急,完全不想看什么没用的分析,请直接拉到文末查看Section 4. 解决方案与总结

主要环境要求共2点,如下:

  1. 操作系统:MacOS
  2. 需要的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. 实验细节:

这一部分将先展示测试的两种方法并附上结果,之后将在方法二的结果之后分析方法二中的一些

3.1 方法 一: 土方法——把 pd.read_parquet()放在for 循环里,这个方法我一开始就没什么信心因为我很久以前读csv文件的时候就这么干过,当时等了很久然后得到一个来自Jupyter Notebook 的dead kernel的反馈。但是在这一次尝试时,是可以运行出结果的,如下:

import time
start_time = time.time()  # 记录开始时间 【1】

# eegDataForTraining 是一个List
# eegDataForTraining是由10w个元组组成的列表
# 其中的每一个元组有两个元素,第一个元素是对应parquet文件的文件编号数据类型是Int.第二个元素在本文中没有用到,忽略它就可以了。
for i in range(len(eegDataForTraining)):
	# str2 是用来临时存放文件的一个变量

	# 10w个文件所在的文件夹的名称
    str2 = 'foldername/'
    
    # 获得文件夹
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我唯一热爱的只有金钱's NOTES

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值