كيفية حساب القيم الفريدة في PySpark (3 طرق)

دليل أكاديمي شامل يشرح كيفية حساب القيم الفريدة في PySpark عبر 3 طرق برمجية عملية، مع تحليل للأداء وخوارزميات المعالجة الموزعة للبيانات الضخمة.

Mohammed looti أكاديمي وباحث متخصص في علم النفس
تاريخ النشر
تمت المراجعة العلمية · د. مروة عبد العظيم · 28 أكتوبر، 2026
مراجعة وتدقيق علمي معتمد تاريخ التدقيق: 28 أكتوبر، 2026
د. مروة عبد العظيم دكتوراه في علم النفس
عضو هيئة التدريس • جامعة كربلاء
معايير التدقيق والاعتماد السريري

يخضع هذا المحتوى لمعايير ضبط الجودة والتدقيق العلمي والأكاديمي الصارمة في شبكة علم النفس العربي، لضمان صحة المعلومات ودقتها السريرية ومطابقتها لأحدث الأدلة والبراهين الصادرة عن الجمعيات النفسية والطبية المعتمدة (APA / WHO).

تمثل المعالجة التحليلية للبيانات الضخمة ركيزة جوهرية في بناء الأنظمة البرمجية الحديثة، حيث تفرض الكميات المتدفقة من السجلات الرقمية تحديات تقنية معقدة على البنى التحتية للمؤسسات. وتعد بيئة أباتشي سبارك، وبخاصة واجهتها البرمجية بلغة بايثون المعروفة باسم باي سبارك، المعيار الأساسي للتعامل مع هذا التدفق الهائل، بفضل قدرتها الفائقة على توزيع الأحمال ومعالجة البيانات المتوازية داخل الذاكرة العشوائية عبر مجموعات خوادم عنقودية متباينة، مما يجعلها المنصة المفضلة لمهندسي وعلماء البيانات حول العالم.

وتشكل مسألة تحديد عدد العناصر الفريدة، أو ما يعرف رياضياً بالتعددية الأساسية داخل أطر البيانات، واحدة من أكثر العمليات الإحصائية والحسابية حساسية في خطوط معالجة البيانات واستخراج الرؤى التحليلية. إن قياس التعددية ليس مجرد مسألة إحصاء عددي بسيط، بل يرتبط ارتباطاً وثيقاً بقرارات معمارية ترتكز على مدى كفاءة استهلاك الذاكرة، والتحكم في حركة نقل البيانات عبر وسائط الشبكة المحلية، والحيلولة دون وقوع اختناقات المعالجة الحسابية الناجمة عن تركز المفاتيح وتوزيعها غير المتكافئ بين وحدات المعالجة الفرعية.

تهدف هذه المقالة المرجعية إلى تقديم دراسة أكاديمية وتطبيقية شاملة لأبرز ثلاث منهجيات معتمدة لحساب القيم الفريدة في بيئة باي سبارك. وسنستعرض في هذا السياق الأبعاد النظرية والبرمجية والهندسية الكامنة وراء كل منهج، مع تفكيك مراحل التنفيذ في محركات التحسين الداخلية، وتحليل السلوك الحسابي عند مواجهة القيم المفقودة والتحديات المقترنة بقابلية التوسع الملياري، لنزود الممارس المتقدم برؤية متكاملة تضمن الموازنة الدقيقة بين الدقة الرياضية وكفاءة الأداء التشغيلي.

1. مدخل نظري إلى معالجة البيانات الضخمة وحساب القيم الفريدة في PySpark

1.1 مفهوم المعالجة الموزعة في Apache Spark وهياكل البيانات

تعتمد منصة أباتشي سبارك في جوهرها على نموذج الحوسبة العنقودية الموزعة، حيث يجري تقسيم مجموعات البيانات الضخمة إلى كتل فرعية مستقلة تسمى الأقسام، تُوزع بالتوازي عبر مجموعة من العقد الحاسوبية التابعة لوحدة معالجة مركزية تديرها عقدة رئيسية. وتأتي واجهة باي سبارك لتمكن المطورين من الاستفادة من هذه البنية التحتية المتقدمة عبر صياغة برمجية بلغة بايثون تعتمد على أطر البيانات، وهي تمثيلات جدولية مجردة مبنية فوق مجموعات البيانات الموزعة المرنة. وتتسم هذه الأطر بخصائص حاسمة تضمن اتساق النظام ومرونته، وفي مقدمتها خاصية عدم القابلية للتغيير؛ إذ لا يمكن تعديل أي إطار بيانات بعد إنشائه، بل يؤدي تطبيق أي تحويل برمجي إلى اشتقاق بنية جديدة تماماً.

علاوة على ذلك، يمثل مبدأ التقييم الكسول حجر الزاوية في آلية عمل محرك سبارك الداخلي؛ حيث تتراكم العمليات والتحويلات البرمجية ضمن رسم بياني لا دوري موجّه دون أن تخضع للتنفيذ الفعلي اللحظي. ولا تبدأ العقد في إجراء العمليات الحسابية إلا عند استدعاء إجراء نهائي يتطلب إرجاع نتيجة محددة إلى البرنامج الرئيس أو حفظها في وحدة تخزين خارجية. يتيح هذا النمط المعماري لمحرك التحسين المدمج فحص شجرة الاستعلام ككل، وإعادة ترتيب مراحل المعالجة، وإسقاط العمليات غير المجدية لتقليل الهدر في الموارد الحاسوبية قبل انطلاق مرحلة التنفيذ الفعلي عبر العقد.

1.2 الدلالة الإحصائية والتحليلية لحساب القيم الفريدة

يحظى حساب القيم الفريدة، والمعبر عنه تقنياً بمفهوم التعددية الأساسية، بأهمية استثنائية في سياق التحليل الاستكشافي للبيانات؛ إذ يمنح المحلل رؤية دقيقة حول مدى تنوع المفردات داخل المتغيرات المستهدفة. وفي سياقات ضبط جودة البيانات، يُشكل إحصاء العناصر الفريدة خط الدفاع الأول لاكتشاف الانحرافات والتشوهات المنهجية، مثل تكرار المعرفات الرقمية التي يفترض تباينها المطلق، أو رصد تكرار سلاسل نصية ناجمة عن أخطاء في تكامل مصادر الإدخال، مما يتيح تصحيح مسارات التدفق قبل انتقال البيانات إلى المستودعات التحليلية المركزية.

ويمتد التأثير الإحصائي لحساب التعددية بصورة مباشرة إلى مراحل الإعداد الهندسي للميزات المستخدمة في تدريب خوارزميات تعلم الآلة؛ إذ إن المعرفة المسبقة لعدد القيم الفريدة للمتغيرات الفئوية تحسم خيار استراتيجية التشفير الرقمي الواجب اعتمادها. فبينما يمكن تطبيق التشفير الثنائي المتعامد على المتغيرات ذات التعددية المنخفضة دون إرباك مصفوفة الميزات، تتطلب المتغيرات ذات التعددية الفائقة تقنيات بديلة كالتشفير التكراري أو التشفير التضميني لتفادي ظاهرة انفجار الأبعاد، وهي مخاطر لا يمكن إدارتها بفاعلية دون إجراء حوسبة دقيقة وموثوقة للقيم الفريدة.

1.3 التحديات الحسابية المرتبطة بعدّ القيم الفريدة في الأنظمة الموزعة

على خلاف البيئات الحاسوبية أحادية النواة، يفرض حساب القيم الفريدة في المنظومات الموزعة تكاليف هندسية باهظة تُعزى بصورة رئيسية إلى ظاهرة خلط البيانات عبر الشبكة. فنظراً لأن السجلات المتطابقة قد تتوزع عشوائياً عبر أقسام حاسوبية تستقر على خوادم فيزيائية متباعدة، يتعين على محرك المعالجة نقل هذه السجلات وجمع المفاتيح المتشابهة داخل عقدة موحدة لإتمام المقارنة والاستبعاد، مما يتسبب في استهلاك مكثف لنطاق النطاق الترددي للشبكة وزيادة ملحوظة في عمليات القراءة والكتابة المؤقتة على وسائط التخزين.

وتتفاقم هذه الأزمة الحسابية عند ظهور معضلة تشتت المفاتيح، حيث تتركز نسبة هائلة من السجلات حول قيمة معينة بينما تتوزع بقية القيم على نطاقات محدودة. يؤدي ذلك إلى تحميل قسم حاسوبي واحد بعبء عمل يفوق طاقة الذاكرة المخصصة للعقدة المضيفة، مما قد يسفر عن انهيار المهمة البرمجية بأكملها نتيجة نفاد الذاكرة. ولهذا السبب، تبرز المفاضلة الهندسية بين الحساب الدقيق الذي يستلزم نقلاً شاملاً للبيانات، وبين الحساب الإحصائي التقريبي الذي يعتمد على خوارزميات احتمالية تكتفي بمساحات ذاكرة ثابتة وتوفر سرعات معالجة فائقة بمعدلات خطأ مضبوطة رياضياً.

2. إعداد بيئة العمل البرمجية وبناء مجموعة البيانات النموذجية

2.1 تهيئة جلسة Spark (SparkSession)

تمثل جلسة سبارك نقطة الانطلاق المركزية الموحدة لتطوير التطبيقات البرمجية في الإصدارات الحديثة من بيئة باي سبارك؛ إذ تدمج الوظائف التي كانت مقسمة سابقاً بين سياق سبارك وسياق الاستعلام الهيكلي وسياق تخزين البيانات الوصفية. ومن خلال هذه الجلسة، يتسنى للمهندس إدارة إعدادات العنقود الحاسوبي، وتخصيص الموارد، والتحكم في معلمات التجزئة والتنفيذ عبر نمط برمجي مرن يضمن التوافق مع مختلف البيئات التشغيلية سواء كانت محلية أو سحابية موزعة.

لتهيئة الجلسة، يجري استدعاء فئة SparkSession وتوظيف نمط البناء لتعيين اسم التطبيق وتحديد مسار المنسق الرئيسي. فعند العمل على بيئة تجريبية محلية، يمكن ضبط المنسق ليعمل بالصيغة المحلية مع توظيف كافة الأنوية المتاحة عبر المعامل local[*]، مع إمكانية تمرير إعدادات إضافية لضبط حجم الذاكرة المخصصة للمشغل، مما يضمن كفاءة إجراء العمليات التجميعية اللاحقة دون مواجهة قيود الاختناق الحاسوبي المبدئي.

2.2 هيكلة إطار البيانات التجريبي للاعبي كرة السلة

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

يتم تمرير هذه السجلات في هيئة قائمة من الصفوف أو الصفائف المقترنة بأسماء أعمدة محددة دلالياً؛ حيث يُطلق على العمود الأول اسم الفريق (team)، والعمود الثاني اسم المركز (position)، بينما يُخصص العمود الثالث لرصد النقاط (points). ويتولى محرك باي سبارك استنتاج المخطط الهيكلي وتعيين الأنواع البيانية الملائمة تلقائياً، محولاً السلاسل النصية إلى أنواع نصية والقيم العددية إلى أعداد صحيحة، مع إمكانية تحديد المخطط يدوياً عبر بنية الأنواع الهيكلية لضمان الصرامة البرمجية وتفادي كلفة الاستنتاج الآلي.

2.3 استكشاف البيانات وفحص التكرارات المبدئية

عقب اكتمال بناء إطار البيانات، تقتضي الممارسة التحليلية الرصينة إجراء معاينة بصرية وهيكلية لفحص التكوين الداخلي للسجلات؛ حيث يتم توظيف دالة العرض لإظهار الصفوف التجريبية في هيئة جدول منسق، مصحوبة باستدعاء دالة فحص المخطط للتأكد من انضباط الأنواع البيانية لكل حقل، والتحقق من عدم وجود تشوهات في قراءة البيانات المدخلة.

وعند التدقيق في السجلات المكونة لإطار البيانات، يمكن ملاحظة وجود مستويين من التكرار المنهجي؛ الأول هو التكرار على مستوى الحقل المنفرد، كظهور اسم فريق معين أو مركز تكتيكي في عدة صفوف متباعدة، والنوع الثاني هو التكرار التام على مستوى الصف بكامل أركانه، حيث تتطابق قيم الفريق والمركز والنقاط مع صف آخر بشكل مطلق. يمنح هذا التمييز الأولي للمحلل الأساس المنطقي للتحقق من سلامة وصحة النتائج الرقمية التي ستسفر عنها الطرق الثلاث لاحقاً، والتأكد من مطابقتها للتوقعات الحسابية.

3. الطريقة الأولى: حساب القيم الفريدة في عمود فردي محدد

3.1 استدعاء مكتبات وظائف PySpark SQL المتخصصة

تتطلب المعالجة التحليلية الدقيقة على مستوى الأعمدة الفردية الاستعانة بوحدات الدوال المدمجة والمحسنة داخل حزمة دوال الاستعلام الهيكلي في باي سبارك؛ حيث توفر هذه الحزمة طائفة واسعة من العمليات الرياضية والتجميعية التي تخضع مباشرة لمترجم كاتاليست الداخلي. ويبرز من بين هذه الأدوات دالة countDistinct ودالة الإشارة إلى الأعمدة col، واللتان تشكلان الأساس المعماري لتنفيذ الاستعلامات ذات الدقة الإحصائية العالية.

ومن المنظور البرمجي، يمثل استخدام كائنات الأعمدة الصريحة عبر دالة col نهجاً أكثر متانة مقارنة بالإشارة إلى الأعمدة كسلاسل نصية مجردة، حيث يتيح ذلك للمترجم إجراء الفحص المبكر لأسماء الأعمدة والتحقق من وجودها ضمن المخطط قبل مرحلة التنفيذ الفعلي، كما يسهل دمج التعبيرات المنطقية والعمليات الحسابية المركبة ضمن استدعاء برمجي واحد، فضلاً عن تقليل استهلاك الذاكرة وتفادي الأخطاء اللغوية العرضية أثناء كتابة الاستعلامات المعقدة.

3.2 تطبيق الدالة countDistinct مع آلية التجميع (Aggregation)

لتنفيذ الحساب على عمود منفرد، يتم توظيف التابع التجميعي agg الملحق بإطار البيانات، حيث يسمح هذا التابع بتمرير دوال الإحصاء والتجميع وتطبيقها على كامل السجلات أو على مجموعات فرعية مقسمة. ويُمرر تعبير countDistinct مطبقاً على العمود المستهدف، مثل عمود الفريق، لحساب عدد الأسماء المختلفة للفرق دون تكرار.

ولضمان قابلية قراءة النتيجة ووضوح المخرجات في خطوط الإنتاج البرمجية، يُنصح دائماً بإلحاق العملية التجميعية بدالة إعادة التسمية المستعارة alias. تضمن هذه الإضافة منح العمود الحسابي الناتج اسماً دلالياً واضحاً، مثل عدد الفرق الفريدة، بدلاً من ترك الاسم الافتراضي المركب والمعقد الذي يولده النظام آلياً، مما يسهل استهلاك هذا الناتج في المراحل التحليلية اللاحقة أو تصديره إلى واجهات التقارير التحليلية.

3.3 تحليل النتيجة وتفسير خطة التنفيذ المنطقية

عند تشغيل هذا الاستعلام واستدعاء دالة العرض، يعيد المحرك إطار بيانات مصغر يتألف من صف واحد وعمود وحيد يضم القيمة الرقمية الدقيقة التي تمثل عدد الفرق الفريدة. غير أن ما يحدث وراء الكواليس ينطوي على مسار تحسين معقد؛ إذ يقوم محرك كاتاليست بتحويل التعبير البرمجي إلى خطة تنفيذ منطقية تبدأ بإسقاط الأعمدة غير الضرورية، مع الإبقاء حصرياً على العمود المستهدف لتوفير مساحة الذاكرة وتقليل حجم البيانات المعالجة.

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

4. الطريقة الثانية: حساب القيم الفريدة عبر كافة الأعمدة بصورة آلية

4.1 توظيف استيعاب القوائم (List Comprehension) في المعالجة الجماعية

تتطلب السيناريوهات التحليلية الاستكشافية في كثير من الأحيان حساب التعددية الأساسية لكافة حقول الجدول دون استثناء، وذلك بغية بناء بطاقة قياس شاملة لجودة البيانات. ويمثل اللجوء إلى كتابة أسطر برمجية منفصلة لكل عمود نمطاً برمجياً مضاداً يتنافى مع مبادئ المعالجة المؤتمتة وقابلية التوسع؛ ومن هنا يبرز أسلوب استيعاب القوائم في لغة بايثون كأداة فائقة المرونة لصياغة استعلامات ديناميكية تتكيف تلقائياً مع حجم المخطط البياني.

تعتمد هذه الآلية على استخراج قائمة أسماء الأعمدة المخزنة تلقائياً في خاصية columns التابعة لإطار البيانات، ثم المرور عليها حلقة تلو الأخرى لبناء قائمة متكاملة من كائنات التجميع البرمجية، حيث يُمثل كل عنصر في القائمة تعبير countDistinct مخصص لعمود محدد. ولتمرير هذه القائمة دفعة واحدة إلى دالة التجميع agg، يتم استخدام عامل التفكيك النجمي (*)، الذي يفرغ عناصر القائمة في صورة معاملات وسيطة منفصلة يتقبلها التابع التجميعي بسلاسة.

4.2 التطبيق العملي لحساب التعددية الشاملة للبيانات

عند إطلاق الاستعلام التجميعي المعزز بالتفكيك النجمي، يُخضع المحرك كافة تعبيرات التجميع لمعالجة موحدة تهدف إلى استخراج صف إحصائي شامل. ولكي تصبح المخرجات واضحة المعالم، يُدمج استيعاب القوائم بإسناد الأسماء البديلة ديناميكياً، بحيث يحمل كل عمود في الإطار الناتج التسمية الأصلية للحقل المناظر له مسبوقة أو ملحقة بما يفيد كونه إحصاءً للقيم الفريدة.

ينتج عن هذا الإجراء صف أفقي وحيد يماثل في عرضه عدد أعمدة إطار البيانات الأصلي، حيث يقابل كل عمود رقم يحدد بدقة متناهية تعدديته الأساسية؛ فيظهر مثلاً عدد الفرق الفريدة بجوار عدد المراكز الفريدة وعدد قيم النقاط غير المكررة. تتيح هذه الرؤية المتوازية للمحلل إجراء مقارنات فورية بين اتساع المجالات القيمية للمتغيرات المختلفة، مما يسهم في اتخاذ قرارات سريعة بشأن استراتيجيات الفهرسة والتقسيم المناسبة لكل متغير.

4.3 اعتبارات الأداء عند تطبيق الاستيعاب على جداول واسعة الأعمدة

على الرغم من الأناقة البرمجية التي يوفرها استيعاب القوائم، إلا أن تطبيقه على جداول تتضمن مئات أو آلاف الأعمدة يفرض أعباءً بالغة التعقيد على محرك سبارك الداخلي؛ إذ يؤدي توليد مئات التعبيرات التجميعية المستقلة إلى تضخم شجرة الاستعلام المنطقية داخل محرك كاتاليست، مما يرفع من زمن مرحلة التخطيط والتحسين المسبقة قبل بدء المعالجة الفعلية.

بالإضافة إلى ذلك، تتطلب المعالجة المتزامنة لتعددية مئات الأعمدة إجراء عمليات خلط شبكي مكثفة تتوزع فيها مفاتيح التجزئة باتجاهات متعددة في الوقت ذاته، مما قد يؤدي إلى استنزاف ذاكرة المشغلات واختناق قنوات الاتصال الداخلي. ولتفادي هذه التبعات السلبية في بيئات الإنتاج ذات الجداول فائقة الاتساع، يُنصح بتطبيق استراتيجية التقسيم الدفعي للاستعلامات، بحيث يجري حساب القيم الفريدة لمجموعات فرعية من الأعمدة على مراحل متتالية بدلاً من دمجها في عملية تجميعية أحادية عملاقة.

5. الطريقة الثالثة: حساب إجمالي عدد الصفوف الفريدة بالكامل داخل إطار البيانات

5.1 آلية عمل الدالة distinct وإزالة التكرارات الأفقية

تختلف متطلبات التحليل أحياناً عن مجرد حصر التنوع داخل الأعمدة المنفردة، لتتجه نحو فحص اتساق البيانات على المستوى الأفقي الشامل؛ حيث تبرز الحاجة لتحديد عدد السجلات المتمايزة كلياً واستبعاد الصفوف المتطابقة في كافة قيمها وحقولها. وهنا يأتي دور التابع distinct المدمج في بنية إطار البيانات، والذي يمثل تحويلاً برمجياً يهدف إلى استخلاص نسخة منقحة من البيانات خالية من أي تكرار أفقي.

تعمل دالة distinct من خلال تطبيق خوارزمية تجزئة ومقارنة تشمل كافة قيم الأعمدة المكونة لكل صف دون استثناء؛ حيث يُعامل الصف بأكمله كوحدة تركيبية متكاملة. إذا تطابقت قيم الفريق والمركز والنقاط تماماً بين صفين أو أكثر، يقوم المحرك بدمج هذه السجلات في سجل واحد فقط وإسقاط التكرارات الفائضة، مما ينتج إطار بيانات فريداً ومؤقتاً يعكس البنية الصافية للبيانات المدخلة.

5.2 استدعاء دالة العد الإجمالية count وتوليد الناتج النهائي

نظراً لأن استدعاء دالة distinct يمثل تحويلاً كسولاً لا يترتب عليه تنفيذ فوري، يتعين على المطور ربطه بإجراء فعلي لاستخراج النتيجة الرقمية النهائية، ويتحقق ذلك عبر إلحاق التحويل بدالة العد الإجمالية count. يطلق هذا الربط إشارة البدء لمحرك سبارك لحساب إجمالي عدد الصفوف المتبقية بعد استبعاد كافة السجلات المكررة كلياً.

وعند تطبيق هذا النمط على البيانات التجريبية للاعبي كرة السلة، نلاحظ انخفاضاً في العدد الكلي للسجلات بمقدار الصفوف التي تطابقت حقولها بالكامل مع صفوف أخرى، في حين تظل الصفوف التي تتشابه في بعض الأعمدة وتختلف في أخرى محفوظة بالكامل. ومن الناحية المعمارية، تتضمن هذه العملية تقسيم البيانات وإعادة توزيعها عبر العقد لضمان فرز الصفوف المتطابقة جنباً إلى جنب، قبل أن تتولى مرحلة العد النهائية جمع الأرقام الجزئية وتمرير المجموع الكلي إلى المشغل الرئيسي.

5.3 مقارنة دالة distinct مع دالة dropDuplicates

تتشابه دالة distinct وظيفياً مع دالة dropDuplicates في حال استدعاء الأخيرة دون تمرير أي معاملات وسيطة؛ إذ تؤدي كلتاهما إلى نفس النتيجة المنطقية المتمثلة في إسقاط الصفوف المتطابقة تماماً عبر كافة الأعمدة. غير أن دالة dropDuplicates تتمتع بمرونة هندسية متقدمة تجعلها أكثر تفضيلاً في كثير من البنى التطبيقية؛ حيث تتيح للمهندس تحديد مجموعة فرعية محددة من الأعمدة لتكون أساساً للمقارنة وإسقاط التكرار.

فعلى سبيل المثال، يمكن استخدام dropDuplicates بالاستناد إلى عمودي الفريق والمركز فقط، مع تجاهل التباين في عمود النقاط، مما يمنح المطور تحكماً أدق في تعريف معنى التكرار وفقاً لمتطلبات العمل المحددة. ومن زاوية التفضيل المعماري، يُستحسن استخدام distinct عندما يكون الهدف صريحاً وبسيطاً يتمثل في إزالة التكرار الأفقي التام، في حين تظل dropDuplicates الخيار الأنسب لإجراءات تنظيف وتصفية البيانات المعتمدة على المفاتيح المركبة والأعمال الإحصائية الحساسة.

6. تحليل الأداء المقارن والتعقيد الحسابي بين المنهجيات الثلاث

6.1 تقييم كفاءة الذاكرة وعمليات خلط البيانات (Shuffle Operations)

تتباين الطرق الثلاث تبايناً جذرياً في بصمتها الاستهلاكية لموارد الذاكرة وحجم حركة المرور المنقولة عبر منافذ الشبكة المحلية. فعند تطبيق الطريقة الأولى المعتمدة على countDistinct لعمود فردي، يقتصر نقل البيانات على قيم ذلك العمود وحده، وتلعب آليات التجميع المسبق في جانب التعيين دوراً بالغ الأهمية في تقليص حجم السجلات المنقولة محلياً قبل نقلها عبر الشبكة، مما يقلل بشكل حاسم من مخاطر ازدحام القنوات السلكية.

وعلى النقيض من ذلك، تفرض الطريقة الثالثة التي توظف distinct كلفة شبكية وتخزينية أعلى بكثير؛ إذ تتطلب نقل كامل أجزاء الصفوف عبر الشبكة لمقارنة كل الحقول مجتمعة، مما يؤدي إلى توليد ملفات خلط ضخمة على وسائط التخزين واستهلاك متصاعد للذاكرة العاملة في المشغلات. وإذا كانت السجلات تتضمن حقولاً نصية واسعة أو هياكل بيانية متداخلة، فإن احتمالية حدوث أخطاء نفاد الذاكرة ترتفع بصورة حادة مقارنة بالحساب المركز على مستوى العمود المنفرد.

6.2 مقارنة زمن التنفيذ وخطة التحسين المادية (Physical Plan)

تنعكس الفروق المعمارية بين الطرق الثلاث بوضوح في زمن الاستجابة وخطة التنفيذ المادية التي يمكن تتبعها عبر واجهة مستخدم سبارك. ففي الطريقة الأولى، تظهر خطة التنفيذ مرحلتي تجميع تعتمدان على خوارزمية التجميع التجزئي، حيث يجري دمج البيانات بكفاءة بالغة، مما يجعل زمن التنفيذ سريعاً للغاية حتى في مجموعات البيانات التي تحتوي على عشرات الملايين من الصفوف.

أما في الطريقة الثانية، تتضاعف تعقيدات خطة التنفيذ المادية تبعاً لعدد الأعمدة المستهدفة، وقد يلجأ محرك كاتاليست إلى إدخال مراحل فرز إضافية إذا كانت مساحة الذاكرة المخصصة للتجميع التجزئي غير كافية لاستيعاب كافة المفاتيح المتزامنة، مما يرفع زمن المعالجة الإجمالي. وفي الطريقة الثالثة، تنقسم خطة التنفيذ إلى مرحلة أولى لحساب التمايز عبر خلط كامل السجلات وإسقاط التكرار، تعقبها مرحلة ثانية لتنفيذ إجراء العد التراكمي، مما يجعلها الأكثر استغراقاً للوقت بين المنهجيات الثلاث.

6.3 مصفوفة المعايير لاختيار الطريقة المثلى

يتطلب الاختيار الرشيد بين هذه المنهجيات الاستناد إلى مصفوفة معايير هندسية محكمة تأخذ في الحسبان ثلاثة أبعاد رئيسية: حجم البيانات، وطبيعة الهيكلية، وموارد البنية التحتية المتاحة. فعندما يكون الهدف هو قياس التنوع الإحصائي لخاصية محددة أو مجموعة محدودة من الخصائص، تمثل الطريقة الأولى الخيار الأمثل هندسياً لتقليل استهلاك موارد العنقود الحسابي وتسريع دورة المعالجة التحليلية.

أما إذا كانت الحاجة قائمة لبناء ملف تعريفي استكشافي كامل لجدول بياني في مستهل مشروع تحليلي، فإن الطريقة الثانية توفر المرونة البرمجية المطلوبة مع ضرورة مراقبة عرض الجدول لتفادي إجهاد المحرك. وفي المقابل، تُحجز الطريقة الثالثة حصرياً لحالات الاستخدام التي تتطلب التحقق الصارم من عدم تكرار السجلات التجارية بالكامل وضمان اتساقها الشامل، شريطة توافر سعات كافية من الذاكرة ونطاق ترددي شبكي قادر على استيعاب عمليات الخلط المكثفة.

7. التعامل مع القيم المفقودة (Nulls) وتأثيرها على حساب القيم الفريدة

7.1 سلوك دالة countDistinct تجاه القيم الخالية (Null Values)

تتبع دالة countDistinct في باي سبارك القواعد الرياضية الصارمة المعتمدة في معايير لغة الاستعلام الهيكلي القياسية فيما يتعلق بالقيم المفقودة؛ حيث تسقط الدالة القيم الخالية تلقائياً ولا تدرجها ضمن التعداد الإحصائي النهائي للقيم المتمايزة. فإذا كان العمود يحتوي على أربعة أسماء مختلفة وقيمة خالية مكررة في عدة صفوف، فإن الناتج الإحصائي سيكون أربعة فقط، متجاهلاً وجود القيمة الخالية تماماً كعنصر تمايز.

وقد يترتب على هذا السلوك الافتراضي سوء تقدير في بعض السياقات التحليلية التي تتطلب معاملة غياب البيانات كحالة فرعية فريدة قائمة بذاتها. ولتجاوز هذا القيد عند الضرورة الحسابية، يلجأ المطورون إلى معالجة العمود مسبقاً عبر دوال التعويض مثل coalesce، لاستبدال القيمة الخالية بسلسلة نصية دلالية أو قيمة رقمية قياسية تمثل الغياب قبل تمرير العمود إلى دالة countDistinct، مما يضمن احتساب الغياب كقيمة متمايزة إضافية ترفع الناتج بمقدار واحد.

7.2 سلوك دالة distinct على مستوى الصفوف المحتوية على قيم خالية

على النقيض من السلوك الانتقائي لدالة حساب التعددية على مستوى العمود، تنتهج دالة distinct أسلوباً شمولياً في التعامل مع القيم الخالية؛ إذ تعتبر بيئة سبارك أن القيمة الخالية تتطابق مع قيمة خالية أخرى عند إجراء عمليات المقارنة الأفقية بين الصفوف. ونتيجة لذلك، إذا اشتملت البيانات على صفين أو أكثر تتطابق فيهما كافة القيم بما في ذلك الحقول التي تحمل قيماً خالية، فإن العملية تدمج هذه الصفوف في صف تمثيلي واحد دون إسقاط السجل ككل.

ويعد هذا السلوك منطقياً ومتسقاً مع فلسفة تنقية الجداول واستبعاد التكرارات الكلية؛ فالصف الذي يحتوي على قيم مفقودة يظل سجلاً قائماً في البنية الهيكلية لا يجوز حذفه من الحساب الإجمالي للصفوف. غير أن هذا التباين في التعامل مع القيم المفقودة بين دالة countDistinct ودالة distinct يفرض على مهندسي البيانات اليقظة التامة، إذ قد يظهر اختلاف رقمي غير متوقع بين ناتج الطريقتين يُعزى تحديداً إلى كيفية معالجة الفراغات وليس إلى خطأ في الخوارزميات.

7.3 استراتيجيات المعالجة المسبقة للبيانات المفقودة

لتفادي أي تضارب إحصائي ناجم عن المعاملة المتباينة للقيم الخالية، تقتضي أفضل الممارسات إدراج مرحلة معالجة وتدقيق مسبقة تسبق عمليات حساب القيم الفريدة. وتبرز هنا دالة fillna كأداة مركزية لتوحيد حقول البيانات، حيث يمكن استخدامها لملء القيم الفارغة في الأعمدة النصية بقيم صريحة تعبر عن عدم التوفر، وملء الأعمدة الرقمية بأصفار أو قيم قياسية متفق عليها تعكس المعنى الحسابي المقصود.

كما يمكن توظيف التعبيرات الشرطية المتقدمة عبر دالتي when وotherwise لبناء آليات مرنة تعزل الحالات الشاذة وتحدد قواعد مخصصة لاحتساب الفراغات بما يلائم متطلبات قطاع الأعمال المستهدف. تسهم هذه المعالجات الاستباقية في رفع موثوقية الأرقام المستخرجة، وتزيل أي غموض قد يعتري التفسير الإحصائي للتعددية الأساسية عند مشاركة النتائج مع المحللين أو استخدامها في تغذية خطوط إنتاج النماذج الرياضية اللاحقة.

8. الحساب التقريبي للقيم الفريدة: خوارزمية HyperLogLog في مجموعات البيانات المليارية

8.1 الأسس النظرية لخوارزمية HyperLogLog (HLL)

عندما تبلغ مجموعات البيانات أحجاماً مليارية فائقة الضخامة، تصبح كلفة إجراء الحساب الدقيق عبر النقل الكامل والفرز الشبكي غير مجدية اقتصادياً وزمنياً، مما يمهد الطريق لتبني الحوسبة الإحصائية التقريبية. وتعد خوارزمية HyperLogLog المعيار الصناعي والرياضي الرائد في هذا المضمار؛ إذ تقدم تقديراً عالي الدقة للتعددية الأساسية باستخدام مساحات ذاكرة متناهية الصغر وثابتة الحجم، بصرف النظر عن حجم مجموعة البيانات المستهدفة.

تعتمد الخوارزمية على فكرة رياضية بارعة تتمثل في تمرير قيم العمود عبر دالة تجزئة تشفيرية متجانسة تحول المدخلات إلى سلاسل بتات ثنائية عشوائية التوزيع، ثم مراقبة أطول سلسلة متتالية من الأصفار في بدايات هذه السلاسل. وانطلاقاً من الاحتمالات الإحصائية، فإن احتمالية ظهور سلسلة تتضمن عدداً معيناً من الأصفار تتناسب عكسياً مع حجم المدخلات الفريدة، وتستخدم الخوارزمية المتوسط التوافقي عبر سجلات متعددة لتصحيح الانحرافات وحساب التقدير النهائي بحدود خطأ معيارية مضبوطة بدقة.

8.2 تطبيق دالة approx_count_distinct في PySpark

توفر بيئة باي سبارك تطبيقاً مباشراً ومحسناً لخوارزمية HyperLogLog من خلال دالة approx_count_distinct المتاحة ضمن حزمة دوال الاستعلام الهيكلي. وتتميز هذه الدالة بقبولها معاملاً وسيطاً اختيارياً يحدد الانحراف المعياري النسبي المسموح به (rsd)، والذي تبلغ قيمته الافتراضية خمسة بالمائة، مما يتيح للمطور التحكم في دقة الناتج الإحصائي وفقاً لاحتياجات التطبيق.

وعند مقارنة هذا النهج مع دالة countDistinct الصارمة على بيئات البيانات الضخمة، يتجلى الفارق بوضوح في سرعة التنفيذ وانخفاض استهلاك الذاكرة؛ إذ تكتفي الدالة التقريبية بتبادل مصفوفات السجلات الإحصائية المدمجة بين العقد الحسابية بدلاً من خلط البيانات الأصلية ذات الأحجام الهائلة. ويجعل هذا التفوق من approx_count_distinct الخيار الافتراضي بلا منازع في سيناريوهات المعالجة المباشرة للبيانات المتدفقة، ولوحات القياس الفورية التي لا تتطلب صرامة حسابية مطلقة.

8.3 إدارة المفاضلة بين الدقة الحسابية وسرعة المعالجة

تنطوي الاستعانة بالحلول التقريبية على مفاضلة معمارية واعية بين السرعة والدقة والحصص التخزينية المخصصة؛ إذ يؤدي تقليص معامل الخطأ المسموح به في الدالة التقريبية إلى زيادة عدد السجلات المستخدمة داخلياً، مما يرفع دقة التقدير لكنه يستهلك في المقابل حجماً أكبر من الذاكرة ويزيد قليلاً من زمن المعالجة، في حين يتيح رفع نسبة الخطأ المقبولة تسريع الإجراء الحسابي إلى أقصى حد ممكن.

ويبرز الأثر الاقتصادي لهذه المفاضلة في بيئات الحوسبة السحابية ذات الدفع حسب الاستهلاك، حيث يؤدي استبدال الحساب الدقيق المكلف بالحساب التقريبي إلى تقليص ساعات تشغيل العناقيد الحسابية وخفض تكاليف الخوادم بدرجة ملموسة. وفي أغلب التطبيقات الاستراتيجية والتقارير التنفيذية، يُعد هامش الخطأ الإحصائي الضئيل الذي لا يتجاوز اثنين أو ثلاثة بالمائة ثمناً بخساً ومقبولاً تماماً في مقابل الحصول على نتائج تحليلية شبه فورية لمليارات السجلات الرقمية.

9. أفضل الممارسات المعمارية وتفادي أخطاء الأداء في بيئات الإنتاج

9.1 تحسين تجزئة البيانات (Partitioning Tuning)

يرتبط نجاح العمليات التجميعية في باي سبارك بالانضباط الهندسي لتجزئة البيانات؛ فالمعامل الافتراضي لعدد أقسام الخلط spark.sql.shuffle.partitions والمحدد عادة بمائتي قسم، قد لا يكون ملائماً لجميع أحجام البيانات. ففي البيانات المليارية، يؤدي هذا الرقم المحدود إلى تضخم حجم القسم الواحد مسبباً اختناقات حادة في الذاكرة، بينما يتسبب استخدامه مع بيانات صغيرة في إهدار الموارد عبر إنشاء أقسام متناهية الصغر ترفع من كلفة المعالجة العامة.

ولضبط هذا الأداء، يتعين مواءمة عدد الأقسام مع الحجم الفعلي للبيانات الناتجة عن الخلط والقدرات الاستيعابية لأنوية العنقود الحاسوبي، مستهدفين حجماً تشغيلياً يتراوح بين مائة إلى مائتي ميجابايت للقسم الواحد. كما يجب الحذر عند استخدام دالتي repartition وcoalesce؛ إذ يفضل اللجوء إلى إعادة التوزيع repartition قبل عمليات العد التجميعية المعقدة لضمان التوزيع المتوازن للمفاتيح وتفادي مشكلات التشتت، في حين يُقتصر على دالة تقليص الأقسام coalesce عند الرغبة في دمج المخرجات النهائية دون تحفيز خلط شبكي إضافي.

9.2 التخزين المؤقت الاستراتيجي (Caching and Persistence)

يقع العديد من المطورين في فخ الاستدعاء المتكرر لنفس إطار البيانات لحساب مقاييس فريدة متعددة، مما يدفع محرك سبارك إلى إعادة تنفيذ كافة مراحل التحويل السابقة وسحب البيانات من مصادرها الأصلية في كل مرة يُستدعى فيها إجراء نهائي. ولمعالجة هذا الهدر الحسابي، يبرز دور التخزين المؤقت عبر دالتي cache وpersist كوسيلة فعالة لحفظ نتائج العمليات الوسيطة في الذاكرة لتسريع الاستعلامات اللاحقة.

ومع ذلك، يجب أن يخضع التخزين المؤقت لتقدير معماري مدروس، فلا يتم تفعيله إلا إذا كان إطار البيانات سيُستخدم في استعلامات تجميعية متعاقبة، مع ضرورة اختيار مستوى الاستمرار الملائم، مثل حفظ البيانات في الذاكرة مع استخدام وسائط التخزين كاحتياطي لتفادي فقدان البيانات عند امتلاء الذاكرة. والأهم من ذلك، يتعين تحرير المساحات المحجوزة فور انتهاء الاستعلامات عبر استدعاء دالة إلغاء التخزين المؤقت unpersist، لتجنب تراكم المخلفات التخزينية وحرمان العمليات اللاحقة من موارد الذاكرة اللازمة.

9.3 تفادي الأخطاء البرمجية الشائعة وأنماط التصميم المضادة

تتضمن بيئات تطوير خطوط البيانات بعض الأنماط البرمجية المضادة التي تؤدي إلى شلل تام في كفاءة المعالجة؛ ويأتي في مقدمتها اللجوء غير المبرر إلى تحويل أطر بيانات سبارك إلى أطر بيانات مكتبة بانداس عبر دالة toPandas، أو تجميع السجلات إلى المشغل الرئيسي عبر collect بغرض استخدام أدوات بايثون التقليدية في حساب القيم الفريدة. يؤدي هذا التصرف إلى نقل ملايين السجلات عبر قنوات الاتصال إلى عقدة واحدة، مما يسفر حتماً عن انهيار التطبيق بفعل تجاوز سعة الذاكرة.

ومن الأنماط المضادة الأخرى الاعتماد على الحلقات التكرارية غير الموجهة في بايثون للمرور على الصفوف سطراً بسطر لمعالجة التكرارات، وهو ما يعطل كافة مزايا التحسين المتوازي في سبارك. كما ينبغي الانتباه إلى معضلة عدم توافق الأنواع البيانية داخل الأعمدة، كالخلط بين السلاسل النصية والأرقام أو التنسيقات الزمنية المتباينة؛ إذ يفرض هذا الخلل كلفة باهظة في التحويل الضمني للأنواع أثناء مقارنة المفاتيح، مما يرفع زمن الحساب ويؤدي في كثير من الأحيان إلى نتائج غير دقيقة ناجمة عن أخطاء المقارنة الداخلية.

10. الخلاصة والتطبيقات الصناعية المتقدمة لإحصاء القيم الفريدة

10.1 جدول تركيبي يلخص خصائص ومنهجيات الطرق الثلاث

لتقديم نظرة شمولية تلخص الأبعاد التقنية والتشغيلية التي جرى تفكيكها في هذا المقال، يبرز التباين الهيكلي بين المنهجيات الثلاث بوضوح عبر محاور التنفيذ المختلفة. فالطريقة الأولى القائمة على دالة countDistinct تستهدف فحص الأعمدة الفردية، وتتميز باستهلاك شبكي منخفض بفضل كفاءة التجميع المسبق، مع إسقاطها التلقائي للقيم الخالية، مما يجعلها الخيار المثالي لحساب المقاييس الإحصائية الموجهة ومتغيرات الميزات في نماذج التعلم الآلي.

في المقابل، تمثل الطريقة الثانية القائمة على استيعاب القوائم الآلية امتداداً توسعياً للطريقة الأولى يغطي الجدول بأكمله دفعة واحدة عبر استعلام ديناميكي موحد، وتناسب مرحلة الاستكشاف والتدقيق الشامل لجودة المخططات، مع وجوب الحذر من تطبيقها المباشر على الجداول فائقة العرض لتفادي تضخم شجرة الاستعلام. وتتفرد الطريقة الثالثة المعتمدة على distinct متبوعة بدالة count بمعالجة السجلات أفقياً لإسقاط التكرار التام عبر الصفوف بأكملها، متقبلة القيم الخالية كقيم مكافئة، مما يجعلها الأداة السيادية لضمان اتساق البيانات واستبعاد السجلات المتطابقة في خطوط الإمداد التحليلي، رغم كلفتها الحسابية والشبكية المرتفعة.

10.2 التطبيقات الصناعية في مستودعات البيانات وبحيرات البيانات

يحتل إحصاء القيم الفريدة موقعاً محورياً في قيادة وتوجيه مؤشرات الأداء التشغيلية لدى كبرى المنصات الرقمية ومستودعات البيانات المعاصرة؛ إذ يمثل الأساس الرياضي المعتمد لاحتساب مقاييس المستخدمين النشطين يومياً والمستخدمين النشطين شهرياً، حيث يتطلب الأمر غربلة مئات الملايين من أحداث النقر المسجلة لفرز المعرفات الفريدة للمستخدمين وتقديم صورة دقيقة وصادقة عن النمو والتفاعل الواقعي.

كما يمتد هذا الدور الحيوي إلى خطوط تدفق ومعالجة النصوص والمحادثات الموزعة في منصات الاتصال الرقمية وأنظمة الدعم الفوري ومستودعات معالجة اللغة الطبيعية، حيث يبرز رصد المشاركين الفريدين واستبعاد الرسائل المكررة كركيزة لضمان جودة التحليلات المشتقة (Buda et al., 2026). وتسهم هذه التقديرات الدقيقة في تحسين أداء الفهارس وترتيب الأقسام داخل منصات بحيرات البيانات الحديثة، حيث يُستفاد من مقاييس التعددية الأساسية في تحديد مفاتيح التقسيم الأمثل، وتفعيل آليات تقليم الأقسام بكفاءة، مما يقلص من كميات البيانات الواجب مسحها عند تنفيذ الاستعلامات التحليلية المعقدة ويسرع من زمن استرجاع النتائج بصورة ملحوظة.

10.3 التطلعات المستقبلية في محركات تحسين الاستعلامات الموزعة

تتجه بيئات الحوسبة الموزعة الحديثة نحو أتمتة عمليات تحسين الاستعلامات التجميعية بالاعتماد على خصائص متقدمة تبرز في طليعتها ميزة التنفيذ التكيفي للاستعلامات المدمجة في الإصدارات المتطورة من أباتشي سبارك. وتتيح هذه التقنية للمحرك تعديل خطة التنفيذ المادية في الوقت الحقيقي أثناء تشغيل المهمة البرمجية، بالاستناد إلى الإحصائيات الفورية الناتجة عن مراحل التعيين السابقة، مثل دمج الأقسام المتناهية الصغر تلقائياً، والتعامل الديناميكي مع المفاتيح المتشتتة، واختيار خوارزمية التجميع الأنسب دون تدخل يدوي من المطور.

ومع التسارع التقني في دمج تقنيات الذكاء الاصطناعي وهندسة الميزات التلقائية داخل منصات البيانات الكبرى، يتوقع أن تشهد خوارزميات حساب التعددية الأساسية قفزات نوعية جديدة؛ حيث يتم العمل على تطوير خوارزميات تقريبية ذاتية التكيف تستشعر خصائص التوزيع الإحصائي للبيانات المتدفقة، وتضبط سجلات التجزئة التشفيرية ديناميكياً لتقديم أقصى دقة حسابية ممكنة بأقل استهلاك للموارد الحاسوبية، مما يعزز من مكانة هذه العمليات كحجر زاوية لا غنى عنه في هندسة معالجة البيانات المستقبلية.

المراجع

Buda, G., Tripodi, I. J., Zuromski, K. L., Meagher, M., & Olson, E. A. (2026). Extraction of Texters’ Explicit Emotion Expressions in Crisis Conversations. Findings of the Association for Computational Linguistics: ACL (Findings of ACL). https://doi.org/10.18653/v1/2026.findings-acl.2

تقييم هذا المحتوى

كن أول من يقيّم هذا المحتوى

اقتباس هذا المقال

looti, M. (2026, أكتوبر 28). كيفية حساب القيم الفريدة في PySpark (3 طرق). عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-count-distinct-values-pyspark-3-methods/
looti, Mohammed. “كيفية حساب القيم الفريدة في PySpark (3 طرق).” عرب سايكلوجي, 28 أكتوبر 2026, https://arabpsychology.com/statistics/how-to-count-distinct-values-pyspark-3-methods/.
looti, Mohammed. “كيفية حساب القيم الفريدة في PySpark (3 طرق).” عرب سايكلوجي. أكتوبر 28, 2026. https://arabpsychology.com/statistics/how-to-count-distinct-values-pyspark-3-methods/.