pandas与pyspark计算效率对比

news/2024/11/15 4:03:44/

日常工作中,主要还是应用HQL和SparkSQL,数据量大,分布式计算很快;

本地数据处理,一般会使用python的pandas包,api丰富,写法比较简单,但只能利用单核性能跑数,数据量大可能会比较慢;spark可以利用多核性能;

单机上,这里尝试构造一个大数据集分别对pandas和sparksql进行跑批测试:

# 数据集构造
import pandas as pd
import numpy as np 
import pyarrow
import sys
import time
from pyspark.sql import SparkSessiondf = pd.DataFrame(columns=['id','sales'])
df['id']= np.random.randint(1,10,800000000)    
df['sales']= np.random.randint(30,1000,800000000)   # 生成8亿数据
df = df.append(df)   # 数据量膨胀一倍
df.to_parquet('parquet_test')    # 写入本地文件print(sys.getsizeof(df) / 1024 / 1024 / 1024)  # 总数据占用内存:23个g

定义pandas计算函数

pandas的read函数会将数据一次读入内存,本地机器资源不够可能会有内存溢出,这时候要考虑逐块读取,分别对每块进行聚合,再进行累聚合;

def pandas_duration():start = time.time()# df.to_csv('data.txt',index=False,sep=',')df = pd.read_parquet('parquet_test')mid_time = time.time()print('pandas读取数据用时:{:.2f}'.format(mid_time-start))print(df.groupby('id',as_index=False).max())   # 分组求最大值end = time.time()print(end-start)

定义pyspark读取计算函数

# 防止driver内存溢出,可以把资源调大点,笔者电脑64个g就随意填了个32g,分区数结合实际数据大小资源调整
spark = SparkSession.Builder()\.master("local[*]")\.config("spark.sql.shuffle.partitions",24)\.config("spark.driver.memory","32g")\.config("spark.driver.maxResultSize","32g")\.appName('pyspark')\.getOrCreate()def pyspark_duration():start = time.time()# df.to_csv('data.txt',index=False,sep=',')spark_df = spark.read.parquet('parquet_test')mid_time = time.time()print('spark读取数据用时:{:.2f}'.format(mid_time-start))spark_df.groupBy('id').agg({"sales":"max"}).show()  # 分组求最大值end = time.time()print(end-start)

查看spark计算时间:

在整个运行过程中,电脑最大内存使用14%;(包括其他系统软件占用),数据读取计算只花了32秒
在这里插入图片描述

查看pandas计算时间:

计算巅峰时刻内存在80-90%跳动,差点把我机器干爆了,计算耗时105秒,远大于spark处理32秒

在这里插入图片描述
结论:

小数据量通常我们使用pandas处理会更快;对于大量数据,即使是单机,充分利用多核性能,我们使用spark读取往往会有更好的表现,不用定义分块读取聚合,计算更快,内存使用表现更好;


数据处理&优化技巧相关,感兴趣的同学可以点击下面链接:

SparkSQL优化:https://blog.csdn.net/me_to_007/article/details/130916946

hive优化: https://blog.csdn.net/me_to_007/article/details/126921955

pandas数据处理详解:https://blog.csdn.net/me_to_007/article/details/90141769


http://www.ppmy.cn/news/411432.html

相关文章

性感美女卖猪肉

现在社会出现了很多新鲜事,以前的豆腐西施、烧饼帅哥等等,层出不穷,最近网络上又出现了一位神奇人物,那就是猪肉美女,不知道大家对这个社会现象有什么看法。不知道是不是地不了多久又会出现一个,以什么为主…

怎么看待看“高清美女图片大全”这件事

在这个高速发展世界,我们在物质需求满足的同时也注重精神需求的满足,而精神需求这个方面我大概总结了一下,分为三个小方面:1、健康的精神需求;2、亚健康的精神需求;3、不健康的精神需求。 什么是健康的精神…

女秘书PK老板,“邮件门”传遍全国外企圈

如果你今天还不知道“史上最牛女秘书”是谁,或者你还没收到那封在网络上引起轩然大波的邮件,只能说明你不是那些著名外企中的一员。最近一周,从北京、上海到成都、广州、南京……全国所有知名外企都在疯狂转发一封来自EMC(全球最大…

劲爆美女来袭,这不得用python高清保存防止她被封禁

前言 大家早好、午好、晚好吖 ❤ ~ 环境使用: Python 3.8 解释器 Pycharm 编辑器 模块使用: requests 数据请求 第三方模块 pip install requests <工具> re <正则表达式模块> 安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命令 pip install 模块…

我的美女同事

小A&#xff0c;现在已经是前同事了&#xff0c;前段时间离职了。 小A毕业于某著名艺术类院校&#xff0c;便自觉身上很有些艺术气质&#xff0c;反正我是从来没感觉到&#xff0c;但是小A一直自我感觉良好。小A喜欢养猫&#xff0c;并且时常在办公室跟大家诉说她养的猫咪近况和…

【MySQL入门】-- 数据库简单的SELECT语句详解

目录 1.SQL分类 2.注释 3.数据导入指令 4.基本的SELECT语句 5.列的别名 6.去重复行 7.显示表结构 8.一些数据库基本操作 1.SQL分类 SQL语言在功能上主要分为三大类&#xff1a; DDL(Data Defintion Language)数据定义语言&#xff1a;定义不同的数据库&#xff0c;表…

华三6300交换机密码破解

华三6300交换机console密码破解 注意&#xff1a;若之前配置若没有保存&#xff0c;重启设备配置会丢失。 1、重启设备&#xff0c;重启过程中按ctrlb进入boot菜单。2、选择【CtrlP: Change authentication for console login】跳过console口认证&#xff0c;之后再选择reboo…