为什么 Spark 慢?
从一个引人注目的标题“Spark 为什么这么慢?”开始,值得注意的是,称 Spark“慢”可能意味着多种含义。聚合速度慢吗?数据加载?存在不同的情况。此外,“Spark”是一个广泛的术语,其性能取决于编程语言和使用上下文等因素。因此,在深入讨论之前,让我们将标题改进得更加精确。
由于我主要在 Databricks 上使用 Spark 和 Python,因此我将进一步缩小范围。
优化后的标题将是:
“Spark 的第一印象:‘听说它很快,但为什么感觉很慢?’初学者的视角”
写作动机(随意的想法)
作为广泛使用 pandas、NumPy 和机器学习库的人,我钦佩 Spark 通过并行和分布式处理处理大数据的能力。当我终于在工作中使用 Spark 时,我对它看起来比 pandas 慢的场景感到困惑。不确定出了什么问题,我发现了一些见解并想与大家分享。
你的火花什么时候会变慢?
在进入主题之前
我们简单介绍一下Spark的基本架构。
(集群模式概述)
Spark 集群由执行实际处理的 工作节点和协调和计划执行的驱动程序节点组成。这种架构会影响下面讨论的所有内容,因此请记住这一点。
现在,进入要点。
1. 数据集不够大
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"] * 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分钟后仍在运行。
为什么?
- 惰性求值:所有转换都会排队,并且仅在表演等动作期间执行。
- 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中文网其他相关文章!

ForhandlinglargedatasetsinPython,useNumPyarraysforbetterperformance.1)NumPyarraysarememory-efficientandfasterfornumericaloperations.2)Avoidunnecessarytypeconversions.3)Leveragevectorizationforreducedtimecomplexity.4)Managememoryusagewithefficientdata

Inpython,ListSusedynamicMemoryAllocationWithOver-Asalose,而alenumpyArraySallaySallocateFixedMemory.1)listssallocatemoremoremoremorythanneededinentientary上,respizeTized.2)numpyarsallaysallaysallocateAllocateAllocateAlcocateExactMemoryForements,OfferingPrediCtableSageButlessemageButlesseflextlessibility。

Inpython,YouCansspecthedatatAtatatPeyFelemereModeRernSpant.1)Usenpynernrump.1)Usenpynyp.dloatp.dloatp.ploatm64,formor professisconsiscontrolatatypes。

NumPyisessentialfornumericalcomputinginPythonduetoitsspeed,memoryefficiency,andcomprehensivemathematicalfunctions.1)It'sfastbecauseitperformsoperationsinC.2)NumPyarraysaremorememory-efficientthanPythonlists.3)Itoffersawiderangeofmathematicaloperation

Contiguousmemoryallocationiscrucialforarraysbecauseitallowsforefficientandfastelementaccess.1)Itenablesconstanttimeaccess,O(1),duetodirectaddresscalculation.2)Itimprovescacheefficiencybyallowingmultipleelementfetchespercacheline.3)Itsimplifiesmemorym

SlicingaPythonlistisdoneusingthesyntaxlist[start:stop:step].Here'showitworks:1)Startistheindexofthefirstelementtoinclude.2)Stopistheindexofthefirstelementtoexclude.3)Stepistheincrementbetweenelements.It'susefulforextractingportionsoflistsandcanuseneg

numpyallowsforvariousoperationsonArrays:1)basicarithmeticlikeaddition,减法,乘法和division; 2)evationAperationssuchasmatrixmultiplication; 3)element-wiseOperations wiseOperationswithOutexpliitloops; 4)

Arresinpython,尤其是Throughnumpyandpandas,weessentialFordataAnalysis,offeringSpeedAndeffied.1)NumpyArseNable efflaysenable efficefliceHandlingAtaSetSetSetSetSetSetSetSetSetSetSetsetSetSetSetSetsopplexoperationslikemovingaverages.2)


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Atom编辑器mac版下载
最流行的的开源编辑器

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版
SublimeText3 Linux最新版

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