为什么 Spark 慢?

为什么 spark 慢?

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

由于我主要在 databricks 上使用 spark 和 python,因此我将进一步缩小范围。

优化后的标题将是:

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

写作动机(随意的想法)

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

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

在进入主题之前

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

为什么 Spark 慢?

(集群模式概述)

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

现在,进入要点。

1. 数据集不够大

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

为什么 Spark 慢?

(在单节点机器上对 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"] * 100for 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 fsdf = 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分钟后仍在运行。

为什么? ​​

惰性求值:所有转换都会排队,并且仅在表演等动作期间执行。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 慢?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1354566.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 18:38:23
下一篇 2025年12月13日 07:39:58

相关推荐

  • AoC ‘- 日历史学家歇斯底里(C# 和 Python)#剧透

    今天的挑战非常简单: 第 1 部分:为了解决这个问题,我们必须 根据字符串输入创建 2 个数字列表,按升序排序对于list1中的每个数字,在list2中获取相同的索引,并找到两个数字之间的距离。 然后将距离相加 简单吧。 第 2 部分: 这有点棘手,但我的解决方案的主要概念是: 立即学习“Pytho…

    2025年12月13日
    000
  • 如何使用 Python 抓取 Google 搜索结果

    抓取 google 搜索可提供基本的 serp 分析、seo 优化和数据收集功能。现代抓取工具使这个过程更快、更可靠。 我们的一位社区成员撰写了此博客,作为对 crawlee 博客的贡献。如果您想向 crawlee 博客贡献此类博客,请通过我们的 discord 频道与我们联系。 在本指南中,我们将…

    2025年12月13日 好文分享
    000
  • 爬虫python怎么读

    Python 网页爬取可通过 requests 库获取响应内容,再用 BeautifulSoup 库解析 HTML 结构。首先导入 requests 库发送 HTTP 请求,然后导入 BeautifulSoup 库解析内容,可查找和提取 HTML 元素,从而获取网页内容。requests 库适用于发…

    2025年12月13日
    000
  • python爬虫怎么点按钮

    使用 Seleniumwebdriver 来模拟浏览器操作,通过单击元素的 ID 或 XPath 来点击按钮。步骤包括:安装 Seleniumwebdriver、导入模块、创建 WebDriver 实例、导航到页面、定位按钮(使用 find_element_by_id() 或 find_elemen…

    2025年12月13日
    000
  • python爬虫代码怎么操作

    如何操作 Python 爬虫代码?导入 Python 库(requests、BeautifulSoup);发送 HTTP 请求获得 HTML 代码;解析 HTML 代码形成树形结构;查找所需的 HTML 元素;提取所需的数据;对提取的数据进行处理;输出处理后的数据。 如何操作 Python 爬虫代码…

    2025年12月13日
    000
  • python 怎么验证反爬虫

    Python 中验证反爬虫措施的步骤包括:检查 HTTP 状态码;分析响应头;提取 капча;分析 JavaScript 行为;检查限速机制;使用代理;使用防浏览器检测工具库;人工验证。 如何验证 Python 中的反爬虫措施 在网络爬取过程中,网站通常会实施反爬虫措施来防止滥用或过量爬取。验证反…

    2025年12月13日
    000
  • python爬虫时怎么设置访问时间间隔

    回答:使用 Python 爬虫时,设置访问时间间隔至关重要,以避免服务器过载和封禁。方法如下:导入 time 模块。设置时间间隔(以秒为单位)。访问网页。等待时间间隔。时间间隔的好处包括减少服务器负载、避免封禁和提高爬取效率。最佳间隔取决于流量大小(高流量网站需要较长间隔)。其他注意事项包括网站限制…

    2025年12月13日
    000
  • python爬虫不按顺序怎么办

    解决 Python 爬虫页面抓取无序问题的方法:并行抓取:使用同步机制(如队列)按请求顺序抓取页面。动态页面:使用 JavaScript 渲染引擎模拟用户交互以获得一致视图。服务器端排序:分析排序规则,禁用排序机制或使用 headless 浏览器。爬虫速度过快:调整延迟或速度,使用代理避免被识别为爬…

    2025年12月13日
    000
  • python3爬虫实习报告怎么写

    Python3 爬虫实习收获:熟练掌握 Python3 爬虫技术,精通 Scrapy 框架。培养了问题解决能力,了解了反爬虫技术和应对策略。参与团队协作,提升了沟通和协作能力。了解了互联网数据采集行业的现状和发展趋势。提升了就业竞争力,拓宽了职业视野。 Python3 爬虫实习报告 引言随着互联网技…

    2025年12月13日
    000
  • python 爬虫 该怎么问面试者

    在 Python 爬虫面试中,通过询问以下问题可评估应聘者的能力和经验:Python 爬虫编写经验:了解候选人的经验程度。应对爬虫挑战:考察其解决问题和处理复杂任务的能力。爬虫被阻止的对策:评估其应对常见爬虫挑战的策略。Python 爬虫库的了解程度:确定对 Python 网络爬虫库的熟悉程度。网络…

    2025年12月13日
    000
  • Python爬虫怎么设置进度条

    Python爬虫设置进度条的方法有:使用 tqdm 库:提供易用的 API 和丰富的自定义选项。使用进度条回调函数:适合需要自定义进度或低级爬虫任务。使用 rich 库:提供美观且高级的进度条和控制台输出。 Python爬虫如何设置进度条 简介 在爬取大型网站或处理庞大数据集时,使用进度条可以直观地…

    2025年12月13日
    000
  • python爬虫验证码怎么解决

    Python爬虫验证码解决方案包括图像识别、服务端API、模拟浏览器行为和打码平台。选择解决方案取决于验证码类型、复杂程度和预算,使用验证码解决方案时需要注意遵守网站爬虫政策和避免频繁访问。 Python爬虫验证码解决方案 在网络爬取的过程中,经常会遇到验证码的阻碍。验证码是一种安全机制,用于防止恶…

    2025年12月13日
    000
  • python爬虫之谷歌怎么抓包

    使用Python爬虫抓取谷歌数据可以使用谷歌搜索API或第三方工具。具体步骤包括:使用谷歌搜索API:注册谷歌云平台账号并启用搜索API。安装google-api-python-client库。创建API客户端并执行搜索。解析搜索结果。使用第三方工具:selenium:用于模拟真实浏览器的行为。Be…

    2025年12月13日
    000
  • 用于快速启动 Polylith 的 Cookiecutter

    向您展示一个python cookiecutter,用于在python 中快速启动polylith。如果您不知道什么是 polylith,请阅读文档,对于不耐烦的读者: polylith 是一种软件架构,旨在构建简单、可维护、可测试和可扩展的后端系统。它通过在系统规模上应用功能思维来实现这一点,将代…

    2025年12月13日
    000
  • 单一性下界

    幺正性确保矩阵和顶点被相同数量的内存覆盖。每个存储单元的单一数据类型简化了其每个单独函数的代码和操作。修剪可选参数(例如 3 个限制)可以更轻松地测试和验证复杂的 python 机制。 a.numerical_approx(digits = 3)x.numerical_approx(digits =…

    2025年12月13日
    000
  • 寻求帮助为 Pokémon 数据创建一个简单的 API

    社区开发者您好! 我正在开发 Pokémon 3D 模型查看器项目,我想通过创建一个简单的 API 使 Pokémon 数据更加动态。该项目最初是作为一种探索 Pokémon 3D 模型并在网页上以交互方式显示它们的有趣方式。目前,我将所有数据存储在静态 JSON 文件中,但我希望通过构建动态提供数…

    2025年12月13日
    000
  • 如何使用 Python 创建带有时间和日期的动态壁纸

    如果您曾经想要一张能根据当前时间和日期自动更新的壁纸,那么本教程适合您。我们将使用 python 和一些库(如 pil (pillow))生成图像,添加带有时间和日期的动态文本,然后将此图像设置为 windows 上的壁纸。 我们需要什么? 已安装 python:如果您尚未安装 python,可以从…

    2025年12月13日
    000
  • 理解 Python 中的闭包

    在python中,闭包是一个重要的概念,它允许函数“记住”它被创建的环境,即使在函数完成执行之后也是如此。闭包允许我们在不使用全局变量或类实例的情况下实现有状态函数。 在这篇文章中,我们将通过使用 nonlocal 关键字实现一个简单的计数器来探索闭包。让我们深入探讨一下! 什么是闭包? 当嵌套函数…

    2025年12月13日
    000
  • 配置 Django 项目以将敏感数据存储在 YAML 文件中

    .py 文件中硬编码令牌、数据库凭据和其他敏感数据并不安全。很多人使用django-environ库,但我认为它不方便。因此,我使用 yaml 文件来存储敏感数据,并使用 pyyaml 库来读取它们的数据。 创建项目文件夹: mkdir myproject 切换创建的文件夹: cd myprojec…

    2025年12月13日
    000
  • Jinbase – 多模型事务嵌入式数据库

    嗨,开发者! 我是 Alex,一名技术爱好者。我很高兴向您展示 Jinbase,我的多模型事务嵌入式数据库。 大约一年前,我介绍了 Paradict,这是我对多格式流序列化的看法。鉴于其可读性,Paradict 文本格式实际上是配置文件的一种有趣的数据格式。但是使用 Paradict 来管理配置文件…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信