pandas与pyspark计算效率对比分析

 更新时间:2023年06月16日 09:39:08   作者:一个散步者的梦  
这篇文章主要介绍了pandas与pyspark计算效率对比,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

日常工作中,主要还是应用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 SparkSession
df = 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

到此这篇关于pandas与pyspark计算效率对比的文章就介绍到这了,更多相关pandas与pyspark内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pycharm社区版安装django并创建一个简单项目的全过程

    pycharm社区版安装django并创建一个简单项目的全过程

    社区版的pycharm跟专业版的pycharm应用差别还是不太大,下面这篇文章主要给大家介绍了关于pycharm社区版安装django并创建一个简单项目的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • Python利用xmltodict模块实现处理XML数据

    Python利用xmltodict模块实现处理XML数据

    理解和处理XML数据在Python中是一项常见任务,xmltodict便是一个Python库,用于将XML数据解析为易于处理的Python字典,下面我们就来学习一下xmltodict库的具体使用吧
    2023-11-11
  • python re库的正则表达式入门学习教程

    python re库的正则表达式入门学习教程

    这篇文章主要给大家介绍了关于python re库的正则表达式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • Python对Excel进行处理的实操指南

    Python对Excel进行处理的实操指南

    这篇文章主要给大家介绍了关于Python对Excel进行处理的实操指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python爬虫之批量下载喜马拉雅音频

    Python爬虫之批量下载喜马拉雅音频

    今天教大家如何利用Python爬虫批量下载喜马拉雅音频,文中有非常详细的代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • 手把手教你配置JupyterLab 环境的实现

    手把手教你配置JupyterLab 环境的实现

    这篇文章主要介绍了手把手教你配置JupyterLab 环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • python之用Numpy和matplotlib画一个魔方

    python之用Numpy和matplotlib画一个魔方

    这篇文章主要介绍了如何用Numpy和matplotlib画一个魔方,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Python中容易被忽视的核心功能总结

    Python中容易被忽视的核心功能总结

    Python是一门富有魅力的编程语言,拥有丰富的功能和库,以及强大的社区支持,然而,有一些核心功能经常被忽视,而它们实际上可以极大地提高代码的质量、可读性和性能,本文将给大家详细的介绍一下这些容易被忽视的功能,需要的朋友可以参考下
    2023-11-11
  • python根据时间生成mongodb的ObjectId的方法

    python根据时间生成mongodb的ObjectId的方法

    这篇文章主要介绍了python根据时间生成mongodb的ObjectId的方法,涉及Python操作mongodb数据库的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • python jinjia2的项目使用

    python jinjia2的项目使用

    本文主要介绍了python jinjia2的项目使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02

最新评论