数据分析新星,DuckDB与Pandas处理大数据速度对比

大家好,Pandas库众所周知,适合数据分析新手入门,但在大数据面前却显得处理缓慢。相比之下,开源的DuckDB以其卓越的列式存储性能,在大数据处理上速度惊人,速度远超Pandas。而且,DuckDB配备了Python库,让熟悉SQL的用户能够快速转换,大幅提升数据处理效率,接下来看看这两者在处理超亿级数据时的性能对比。

1.Pandas与DuckDB基准测试设置

下面展示基准测试所用的数据集和Pandas与DuckDB的代码实现。测试基于 M2 Pro MacBook Pro 12/19 核、16 GB 内存设备进行。

1.1 数据集信息

所使用的数据集是纽约市出租车和豪华轿车委员会(TLC)提供的行程记录数据。这些数据是在2024年4月18日从纽约市政府官方网站获取的,可以免费使用(https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page)。有关数据使用的许可信息,可以在nyc.gov网站上查询。

1.2 基准测试目标

基准测试的目标是使用Pandas和DuckDB两个工具加载Parquet格式的数据文件,进一步计算月度统计信息,包括行程总数、平均持续时间、行驶距离、总车费以及小费金额。

为此,需要生成几个日期时间字段,依据特定时间段对数据进行筛选,并在Pandas中有效管理多级索引。

数据加载完成后,会发现要处理的数据超过1.11亿条:

图片

对于结果,希望得到以下 DataFrame:

图片

1.3 Pandas设置

Pandas是一个为简便数据处理而设计的单线程库,并不擅长快速处理大量数据。

Pandas首先需要将全部数据一次性加载入内存,在处理Parquet文件时,还得依次单独读取每个文件,这一过程并不高效。

此外,使用Pandas时还需应对多级索引重置的繁琐工作,这一步骤是为了使各个列的数据更易于访问:

import os
import pandas as pd# 加载数据
base_path = "path/to/the/folder"parquet_files = [os.path.join(base_path, file) for file in os.listdir(base_path) if file.endswith('.parquet')]dfs = [pd.read_parquet(file) for file in parquet_files]
df_pd = pd.concat(dfs, ignore_index=True)# 基准测试函数
def calculate_monthly_taxi_stats_pandas(df: pd.DataFrame) -> pd.DataFrame:# ...(此处省略函数实现细节)return df# 运行
res_pandas = calculate_monthly_taxi_stats_pandas(df=df_pd)

2.DuckDB设置

通过Python与DuckDB进行交互有多种方法,但最直接简便的方式是使用类似SQL的命令。实际上,仅需两条SELECT语句,即可实现之前用Pandas编写的代码功能。

DuckDB还内置了一个高效的parquet_scan()函数,能够同时读取指定路径下的所有Parquet文件,大大提高了数据处理的效率:

import duckdb# 数据库连接
conn = duckdb.connect()# 基准测试函数
def calculate_monthly_taxi_stats_duckdb(conn: duckdb.DuckDBPyConnection, path: str) -> pd.DataFrame:# ...(此处省略函数实现细节)return df# 运行
res_duckdb = calculate_monthly_taxi_stats_duckdb(conn=conn, path="path/to/the/folder/*parquet")

3.基准测试结果

图片

DuckDB能在两秒之内处理超过1亿条记录的庞大数据集,其速度之快令人难以置信,处理速度比Pandas快352倍。如果能接受DuckDB的某些局限,它肯定是一个可行的Pandas替代品。

4.总结

总的来说,DuckDB能够使用大家熟悉的SQL语言来快速编写并执行数据聚合查询,速度提升了几个数量级。

DuckDB还支持多种文件格式,包括JSON、CSV和Excel,并且能够与多家数据库厂商的产品兼容。如果你打算在更专业的环境下使用DuckDB,你将有很多灵活的选择。

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

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

相关文章

GPT-4o在加密货币情绪动态和行为模式应用

本文研究了加密货币相关讨论中的预测性陈述、希望言论和后悔检测行为,旨在通过少量学习和大语言模型(如GPT-4o)分析投资者的情绪动态和预测行为。该问题的研究难点包括:数据量有限、资源可用性不足、需要准确分类预测性陈述、希望…

企业精英引领未来,大数据讲座照亮中职学子职业航道

为深化校企合作模式,加速产教融合步伐,搭建起职业教育与职场世界的无缝对接桥梁,唯众企业携手武汉市第二职业教育中心(简称“武汉二职”),共同举办了一场别开生面的专题讲座。此次活动不仅促进了企业与学生…

掌握SQLAlchemy:Python数据库的魔法师

文章目录 掌握SQLAlchemy:Python数据库的魔法师背景:为什么选择SQLAlchemy?SQLAlchemy是什么?如何安装SQLAlchemy?五个简单的库函数使用方法1. 创建引擎2. 定义模型3. 创建会话4. 添加数据5. 查询数据 场景应用1. 多表…

vulhub ThinkPHP5 5.0.23远程代码执行漏洞

1.执行以下命令启动靶场环境并在浏览器访问 cd thinkphp/5.0.23-rcedocker-compose up -ddocker ps 2.访问网页172.16.1.26:8080 3.判断是否存在漏洞:访问/index.php?scaptcha页面,会出现如下报错 4.使用HackBar 插件发送 POST 请求 _method__constru…

etcdctl defrag 剔除、添加etcd节点

零、准备工作 find / -name etcdctl cp /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/12/fs/usr/local/bin/etcdctl /usr/local/bin/etcdctlalias ec"etcdctl --endpointshttps://127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --…

【杂记】裂脑人实验和语言模型幻觉

【杂记】裂脑人实验和语言模型幻觉 模型的自主意识在哪里,人的自我认知在哪里?自然而然的,“裂脑人” 这个词突然出现在我脑海里。然后随意翻了翻相关的文章,觉得这个问题和目前大模型面临的幻觉问题也高度相关,遂随笔…

macos下的 sed命令安装与使用 gnu-sed

sed命令是我们在linu类系统中非常重要的一个命令, 但是在macos下面默认是没有sed命令的, 不过我们可以通过brew install gnu-sed ( 或者通过 sudo port install gsed )这个软件包来获得这个命令 GNU sed 命令安装 下面2种方式,选择一种安装即可 # brew安装 brew install gn…

栈 | 队列

系统栈主要保存以下内容: 1.局部变量,2.函数的形参和返回值 3.函数的调用关系 一、栈 1.基本概念 栈是一种特殊的线性表,具有线性结构。表尾为栈顶,表头为栈顶。遵循先进后出原则,只能在栈顶进行插入和删除操作。 …

下载Mongodb 4.2.25 版本教程

1、MongoDB 安装包的下载链接 Download MongoDB Community Server | MongoDB 进入如下截图: 2、查找历史版本 往下拉,点击“...”,找到”Archived releases”,点击进入 、 3、下载Mongodb 4.2.25 版本 找到如下图4.2.25版本下载链接,点击就可…

Python输出多位数

作者制作不易,关注、点赞、收藏一下吧! 1.第一种:正常直接用循环 以三位数为例: for i in range(100, 1000):print(i) 运行结果( 展示一部分 ): 图1-1 2.第二种:特定位数 以三位数为例: for i in range(1, 5): # 括号内指定那个位的范围for j in r…

【Java那些事】关于Git的使用

目录 下拉代码仓库篇 上传代码篇 下拉代码仓库篇 第一步,下拉代码,复制链接。 (从开源网站上复制链接) (建立本地仓库) 这里的URL一般都会自动填充刚刚复制的链接【瞅瞅,确保是想要的那个项…

oracle锁的机制

文章目录 oracle锁的机制1. 概括2.锁的模式3.锁查看 死锁1. 说明2.死锁产生条件3.解决死锁冲突4. 事务和死锁预防总结 oracle锁的机制 1. 概括 1)说明 锁是一种机制,多个事务同时访问一个数据库对象时,该机制可以实现对并发的控制 2&…

Android Dialog:Dialog和DialogFragment的区别?DialogFragment如何使用?源码解析

目录 一、Dialog和DialogFragment的区别 Android在DialogFragment推出后,就已经不推荐继续使用Dialog,可替换为DialogFragment: 更好的生命周期管理:DialogFragment能够自动处理Activity的生命周期事件,确保对话框在…

Git 撤回commit

上一篇,Git撤销add,其实已经讲了用reset命令可以取消commit,这里再啰嗦下。先看: git如何撤回已经commit • Worktile社区 首先明确一点,无论是commit还是撤销commit,都是在本地暂存区操作,而…

如何测试一个算法

目录 1.从参数上进行设计 2.从代码逻辑上进行设计 3.从代码性能上进行设计 4.考虑异常情况 5.总结 下面是冒泡排序的代码&#xff0c;我们如何针对这个代价进行测试? public void BubbleSort(int[] arr) {for (int i 0; i < arr.length; i) {for (int j 0; j < a…

CleanMyMac X2024最新官方中文破解版本下载

&#x1f9f9; 嘿&#xff0c;Mac用户们&#xff0c;你们的小助手来了&#xff01; 今天要跟大家分享的&#xff0c;是一个能让你们的电脑焕发新生的神器——CleanMyMac X。这可不是一般的清洁工&#xff0c;它可是拥有超能力的超级英雄哦&#xff01;&#x1f31f; CleanMyMa…

第 1 章:原生 AJAX

原生AJAX 1. AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML&#xff0c;就是异步的 JS 和 XML。通过 AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准组合在一…

文章如何进行谷歌SEO优化?

内容绝对是谷歌seo最花时间以及成本&#xff0c;内容基本决定一个网站的生死&#xff0c;所以文章绝对要重视&#xff0c;而想写好一篇适用于谷歌seo的文章&#xff0c;首要保证的是内容的质量和原创性&#xff0c;这是SEO的核心&#xff0c;对于一篇seo文章来说&#xff0c;关…

MySQL-进阶篇-锁(全局锁、表级锁、行级锁)

文章目录 1. 锁概述2. 全局锁2.1 介绍2.2 数据备份2.3 使用全局锁造成的问题 3. 表级锁3.1 表锁3.1.1 语法3.1.2 读锁3.1.3 写锁3.1.4 读锁和写锁的区别 3.2 元数据锁&#xff08;Meta Data Lock&#xff0c;MDL&#xff09;3.3 意向锁3.3.1 案例引入3.3.2 意向锁的分类 4. 行级…

Java项目:140 springboot203医疗挂号管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 一共有管理员、挂号人员、划价人员、医生 四个角色 管理员登录进入本系统操作的功能包括对挂号人员&#xff0c;划价人员&#xff0c;患者&#xff0…