首页 后端开发 Python教程 为什么 Spark 慢?

为什么 Spark 慢?

Dec 11, 2024 pm 07:43 PM

为什么 Spark 慢?

从一个引人注目的标题“Spark 为什么这么慢?”开始,值得注意的是,称 Spark“慢”可能意味着多种含义。聚合速度慢吗?数据加载?存在不同的情况。此外,“Spark”是一个广泛的术语,其性能取决于编程语言和使用上下文等因素。因此,在深入讨论之前,让我们将标题改进得更加精确。

由于我主要在 Databricks 上使用 Spark 和 Python,因此我将进一步缩小范围。

优化后的标题将是:

“Spark 的第一印象:‘听说它很快,但为什么感觉很慢?’初学者的视角”


写作动机(随意的想法)

作为广泛使用 pandas、NumPy 和机器学习库的人,我钦佩 Spark 通过并行和分布式处理处理大数据的能力。当我终于在工作中使用 Spark 时,我对它看起来比 pandas 慢的场景感到困惑。不确定出了什么问题,我发现了一些见解并想与大家分享。


你的火花什么时候会变慢?

在进入主题之前

我们简单介绍一下Spark的基本架构。

Why Is Spark Slow??

(集群模式概述)

Spark 集群由执行实际处理的 工作节点和协调和计划执行的驱动程序节点组成。这种架构会影响下面讨论的所有内容,因此请记住这一点。

现在,进入要点。


1. 数据集不够大

Spark 针对大规模数据处理进行了优化,但它也可以处理小型数据集。然而,看看这个基准:

Why Is Spark Slow??

(在单节点机器上对 Apache Spark 进行基准测试)

结果表明,对于 15GB 以下的数据集,pandas 在聚合任务中优于 Spark。为什么?简而言之,Spark 优化的开销超过了小数据集的好处

该链接显示了 Spark 并不慢的情况,但这些情况通常处于本地集群模式。对于独立设置,由于节点之间的网络通信开销,较小的数据集可能是一个缺点。

  • pandas:在一台机器上处理内存中的所有内容,无需网络或存储 I/O。
  • Spark:使用 RDD(弹性分布式数据集),涉及 Workers 之间的网络通信(如果分布式),并会在组织数据以进行并行处理时产生开销。

2. 理解惰性求值

Spark 采用惰性求值,这意味着转换不会立即执行,而是推迟到某个操作(例如收集、计数、显示)触发计算为止。

示例(熊猫):

df = spark.read.table("tpch.lineitem").limit(1000).toPandas()
df["l_tax_percentage"] = df["l_tax"] * 100
for l_orderkey, group_df in df.groupby("l_orderkey"):
    print(l_orderkey, group_df["l_tax_percentage"].mean())
登录后复制

执行时间:3.04秒

Spark 中的等效项:

from pyspark.sql import functions as F
sdf = spark.read.table("tpch.lineitem").limit(1000)
sdf = sdf.withColumn("l_tax_percentage", F.col("l_tax") * 100)

for row in sdf.select("l_orderkey").distinct().collect():
    grouped_sdf = sdf.filter(F.col("l_orderkey") == row.l_orderkey).groupBy("l_orderkey").agg(
        F.mean("l_tax_percentage").alias("avg_l_tax_percentage")
    )
    print(grouped_sdf.show())
登录后复制

执行时间:3分钟后仍在运行。


为什么? ​​

  1. 惰性求值:所有转换都会排队,并且仅在表演等动作期间执行。
  2. Driver 到 Worker 的通信:收集和显示等操作涉及从 Workers 到 Driver 的数据传输,导致延迟。

Spark 代码在 pandas 中有效地执行了此操作:

for l_orderkey, group_df in df.groupby("l_orderkey"):
    df["l_tax_percentage"] = df["l_tax"] * 100
    print(l_orderkey, group_df["l_tax_percentage"].mean())
登录后复制

通过使用 Spark 的缓存或重构逻辑以尽量减少重复计算来避免此类模式。


3. 注意随机播放

https://spark.apache.org/docs/latest/rdd-programming-guide.html#shuffle-operations

随机播放 当数据在 Workers 之间重新分配时发生,通常是在 groupByKey、join 或重新分区等操作期间。随机播放可能会很慢,原因是:

  • 节点之间的网络通信
  • 跨分区数据的全局排序和聚合

例如,拥有更多 Worker 并不总能提高洗牌期间的性能。

  • 32GB x 8 Workers 可能比 64GB x 4 Workers 慢,因为较少的 Workers 会减少节点间通信。

结论

您觉得这有帮助吗?如果有效使用,Spark 是一个出色的工具。除了加速大规模数据处理之外,Spark 还以其可扩展的资源管理而大放异彩,尤其是在云中。

尝试 Spark 来优化您的数据运营和管理!

以上是为什么 Spark 慢?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1653
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1251
29
C# 教程
1224
24
Python vs.C:申请和用例 Python vs.C:申请和用例 Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

Python:游戏,Guis等 Python:游戏,Guis等 Apr 13, 2025 am 12:14 AM

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

您可以在2小时内学到多少python? 您可以在2小时内学到多少python? Apr 09, 2025 pm 04:33 PM

两小时内可以学到Python的基础知识。1.学习变量和数据类型,2.掌握控制结构如if语句和循环,3.了解函数的定义和使用。这些将帮助你开始编写简单的Python程序。

2小时的Python计划:一种现实的方法 2小时的Python计划:一种现实的方法 Apr 11, 2025 am 12:04 AM

2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

Python与C:学习曲线和易用性 Python与C:学习曲线和易用性 Apr 19, 2025 am 12:20 AM

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

Python:探索其主要应用程序 Python:探索其主要应用程序 Apr 10, 2025 am 09:41 AM

Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。

Python和时间:充分利用您的学习时间 Python和时间:充分利用您的学习时间 Apr 14, 2025 am 12:02 AM

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python:自动化,脚本和任务管理 Python:自动化,脚本和任务管理 Apr 16, 2025 am 12:14 AM

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

See all articles