Spark が遅いのはなぜですか??
「なぜ Spark は遅いのですか??」という目を引くタイトルから始まりますが、Spark を「遅い」と呼ぶことはさまざまな意味を持つことに注意することが重要です。集計では遅いですか?データ読み込み?さまざまなケースが存在します。また、「Spark」は広義の用語であり、そのパフォーマンスはプログラミング言語や使用状況などの要素に依存します。それでは、本題に入る前に、より正確になるようにタイトルを調整しましょう。
私は主に Databricks 上の Python で Spark を使用するため、範囲をさらに絞り込みます。
洗練されたタイトルは次のようになります:
「Spark の第一印象: 「速いと聞いていたのに、なぜ遅く感じるの?」初心者の視点」
執筆動機(何気ない思い)
パンダ、NumPy、機械学習ライブラリを幅広く使っている私は、並列分散処理でビッグ データを処理できる Spark の機能の魅力に感心していました。ようやく仕事で Spark を使用できるようになったとき、パンダよりも遅いように見えるシナリオに困惑しました。何が問題だったのかよくわかりませんでしたが、いくつかの洞察を発見したので、それらを共有したいと思います。
火花が遅くなるのはいつですか?
本題に入る前に
Spark の基本アーキテクチャについて簡単に説明しましょう。
(クラスターモードの概要)
Spark クラスターは、実際の処理を実行する ワーカー ノード と、実行を調整および計画する ドライバー ノード で構成されます。このアーキテクチャは、以下で説明するすべてに影響を与えるため、覚えておいてください。
それでは、本題に入ります。
1. データセットの大きさが十分ではありません
Spark は大規模なデータ処理用に最適化されていますが、小規模なデータセットも処理できます。ただし、このベンチマークを見てください:
(単一ノードマシンでの Apache Spark のベンチマーク)
結果は、15 GB 未満のデータセットでは、集計タスクにおいて pandas が Spark よりも優れていることを示しています。なぜ?一言で言えば、Spark の最適化によるオーバーヘッドが、小規模なデータセットの利点を上回ります。
リンクには、Spark が遅くないケースが示されていますが、これらは多くの場合 ローカル クラスター モード です。スタンドアロン設定の場合、ノード間のネットワーク通信のオーバーヘッドにより、データセットが小さいと不利になる可能性があります。
- pandas: ネットワークやストレージ I/O を使用せず、単一マシン上のメモリ内のすべてを処理します。
- Spark: RDD (Resilient Distributed Datasets) を使用し、ワーカー間のネットワーク通信 (分散されている場合) を伴い、並列処理のためにデータを整理する際にオーバーヘッドが発生します。
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 分経ってもまだ実行中です。
なぜ?
- 遅延評価: すべての変換はキューに入れられ、show などのアクション中にのみ実行されます。
- ドライバーからドライバーへの通信: 収集や表示などの操作には、作業者からドライバーへのデータ転送が含まれるため、遅延が発生します。
Spark コードは、これをパンダで効果的に実行します。
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
シャッフルは、通常、groupByKey、結合、再分割などの操作中にデータがワーカー間で再分散されるときに発生します。シャッフルは次の理由で遅くなる可能性があります:
- ノード間のネットワーク通信。
- パーティション間のデータのグローバルな並べ替えと集計。
たとえば、ワーカーの数が増えても、シャッフル中のパフォーマンスが必ずしも向上するとは限りません。
- 32GB x 8 ワーカー は、ワーカーが少ないとノード間通信が減少するため、64GB x 4 ワーカー よりも遅くなる可能性があります。
結論
これは役に立ちましたか? Spark は、効果的に使用すると優れたツールです。 Spark は、大規模なデータ処理を高速化するだけでなく、特にクラウドにおけるスケーラブルなリソース管理でも優れています。
データの運用と管理を最適化するために Spark をお試しください!
以上がSpark が遅いのはなぜですか??の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

forhandlinglaredataSetsinpython、usenumpyArrays forbetterperformance.1)numpyarraysarememory-effictientandfasterfornumericaloperations.2)nusinnnnedarytypeconversions.3)レバレッジベクトル化は、測定済みのマネージメーシェイメージーウェイズデイタイです

inpython、listsusedynamicmemoryallocation with allocation、whilenumpyArraysalocatefixedmemory.1)listsallocatemorememorythanneededededinitivative.2)numpyArrayasallocateexactmemoryforements、rededicablebutlessflexibilityを提供します。

inpython、youcanspecthedatatypeyfelemeremodelernspant.1)usenpynernrump.1)usenpynerp.dloatp.ploatm64、フォーマーpreciscontrolatatypes。

numpyisessentialfornumericalcomputinginpythonduetoitsspeed、memory efficiency、andcomprehensivematicalfunctions.1)それは、performsoperations.2)numpyArraysaremoremory-efficientthanpythonlists.3)Itofderangeofmathematicaloperty

contiguousMemoryAllocationisucial forArraysは、ForeffienceAndfastelementAccess.1)iteenablesConstantTimeAccess、O(1)、DuetodirectAddresscalculation.2)itemprovesefficiencyByAllowingMultiblementFechesperCacheLine.3)itimplifieMememm

slicingapythonlistisdoneusingtheyntaxlist [start:stop:step] .hore'showitworks:1)startisthe indexofthefirstelementtoinclude.2)spotisthe indexofthefirmenttoeexclude.3)staptistheincrementbetbetinelements

numpyallows forvariousoperationsonarrays:1)basicarithmeticlikeaddition、減算、乗算、および分割; 2)AdvancedperationssuchasmatrixMultiplication;

Arraysinpython、特にnumpyandpandas、aresentialfordataanalysis、offeringspeedandeficiency.1)numpyarraysenable numpyarraysenable handling forlaredatasents andcomplexoperationslikemoverages.2)Pandasextendsnumpy'scapabivitieswithdataframesfortruc


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
