لماذا يعتبر Apache-Spark-Python بطيئًا جدًا محليًا مقارنة بالباندا؟



pandas pyspark (1)

سبارك مبتدئ هنا. بدأت مؤخراً باللعب مع Spark على جهازي المحلي على جهازي باستخدام الأمر:

pyspark --master local[2]

لدي ملف نصي 393 ميجابايت يحتوي على ما يقرب من مليون صف. كنت أرغب في إجراء بعض عمليات معالجة البيانات. أنا أستخدم وظائف dataframe المدمجة في PySpark لأداء عمليات بسيطة مثل groupBy ، sum ، max ، stddev .

ومع ذلك ، عندما أقوم بتنفيذ نفس العمليات في pandas على نفس مجموعة البيانات بالضبط ، يبدو أن الباندا تهزم pyspark بهامش كبير من حيث الكمون.

كنت أتساءل ما يمكن أن يكون السبب المحتمل لذلك. لدي بعض الأفكار.

  1. هل تقوم الوظائف المدمجة بعملية التسلسل / إلغاء التسلسل بشكل غير فعال؟ إذا كانت الإجابة بنعم ، فما هي البدائل لهم؟
  2. هل مجموعة البيانات صغيرة جدًا بحيث لا يمكنها تجاوز التكلفة العامة لـ JVM الأساسية التي تعمل عليها الشرارة؟

شكرا لتبحث. مقدر جدا.


لان:

  • يعد Apache Spark إطارًا معقدًا مصممًا لتوزيع المعالجة عبر مئات العقد ، مع ضمان الدقة والتسامح مع الخطأ. كل من هذه الخصائص لديها تكلفة كبيرة.
  • لأن المعالجة الأساسية في الذاكرة (Pandas) البحتة هي أوامر من حجمها أسرع من إدخال / إخراج القرص (حتى المحلي) (Spark).
  • لأن التوازي (والمعالجة الموزعة) تضيفان حمولة كبيرة ، وحتى مع وجود عبء عمل متوازي محرج لا يضمن أي تحسينات في الأداء.
  • لأن الوضع المحلي غير مصمم للأداء. يتم استخدامه للاختبار.
  • أخيرًا وليس آخرًا - لا يعد النواة التي تعمل على 393 ميجابايت كافية لرؤية أي تحسينات في الأداء ، ولا توفر العقدة المفردة أي فرصة للتوزيع
  • أيضًا Spark: رقم أداء غير متسق في قياس عدد النوى ، لماذا يكون pyspark أبطأ بكثير في العثور على الحد الأقصى للعمود؟ لماذا لا يعمل سبارك أبطأ من بيثون النقي؟ مقارنة الأداء

يمكنك الاستمرار على هذا المنوال لفترة طويلة ...





apache-spark-sql