باي سبارك: كيفية التصفية لـ «لا يحتوي على»

دليل أكاديمي شامل يوضح كيفية تصفية البيانات في إطار عمل باي سبارك (PySpark) لاستبعاد السلاسل النصية غير المرغوبة باستخدام عامل النفي ومطابقة النصوص.

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

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

تعد معالجة البيانات الضخمة في العصر الرقمي الراهن حجر الزاوية الذي تستند إليه المنظومات التحليلية المتقدمة ونظم دعم اتخاذ القرار في المؤسسات الأكاديمية والصناعية الكبرى. وفي خضم هذا التدفق الهائل للبيانات غير المهيكلة وشبه المهيكلة، برز إطار Apache Spark بوصفه النظام الرائد عالمياً في إجراء المعالجات الحوسبية الموزعة داخل الذاكرة (In-Memory Distributed Computing). ومع اعتماد لغة بايثون واجهةً برمجية مفضلة لعلماء البيانات ومهندسي النظم عبر مكتبة باي سبارك (PySpark)، برزت الحاجة الملحة إلى صياغة استعلامات دقيقة ومحكمة منطقياً لتحويل البيانات الخام وتنقيتها وتجهيزها للتحليلات اللاحقة وخوارزميات التعلم الآلي.

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

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

1. الأسس النظرية للتصفية الشرطية المعكوسة في بيئة باي سبارك (PySpark)

1.1 طبيعة معالجة البيانات الموزعة وإطار أباتشي سبارك

تستند المعالجة الحديثة للبيانات واسعة النطاق إلى مبدأ تجزئة البيانات الضخمة وتوزيعها عبر عنقود حوسبي (Computing Cluster) متكامل يتألف من عقدة رئيسية تدير العمليات وعقد عاملة تنفذ الحوسبة بالتوازي. وقد وضع هذا الأساس المعماري في مختبر AMPLab بجامعة كاليفورنيا في بيركلي، حيث طور الباحثون إطار أباتشي سبارك لتجاوز أوجه القصور المرتبطة بنموذج ماب ريديوس التقليدي. يعتمد الإطار على بنية تحتية ثورية تُعرف باسم مجموعات البيانات الموزعة المرنة (Resilient Distributed Datasets – RDDs)، والتي توفر تجريداً برمجياً يسمح بإجراء العمليات المتزامنة في ذاكرة الوصول العشوائي مع الحفاظ الكامل على مقاومة الأعطال عبر تتبع سلاسل النسب الحسابية وتاريخ التحويلات السابقة للبيانات.

يتجلى التميز التقني لمحرك سبارك في تبنيه لنموذج التقييم الكسول (Lazy Evaluation)، حيث لا يتم تنفيذ العمليات التحويلية بمجرد استدعائها برمجياً، بل يقوم المحرك بتسجيلها في مخطط توجيهي غير دائري (Directed Acyclic Graph – DAG). يتيح هذا التأجيل المتعمد للمحرك فحص شجرة الاستعلام بالكامل وتحسينها بنيوياً قبل الشروع في أي معالجة فعلية على الأجهزة الخادمة. وتعد عمليات التصفية الشرطية من التحويلات الضيقة (Narrow Transformations) التي تُنفذ محلياً داخل كل تجزئة (Partition) دون الحاجة إلى نقل البيانات بين العقد الحوسبية، مما يعزز كفاءة المعالجة ويقلل زمن الاستجابة.

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

1.2 التباين المنطقي بين التصفية الإيجابية والتصفية الاستبعادية

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

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

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

1.3 التحديات الحوسبية المقترنة بمطابقة الأنماط الفرعية غير المباشرة

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

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

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

2. الصيغة البرمجية القياسية لعامل النفي التكميلي (~) في بايثون وسبارك

2.1 الدلالة التشغيلية لرمز المدة (Tilde Operator) كنفي على مستوى البتات والأعمدة

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

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

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

2.2 تشريح البنية النحوية للتعبير df.filter(~df.column.contains(‘value’))

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

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

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

2.3 قواعد الأسبقية الحسابية ودور الأقواس في تجنب الأخطاء الإعرابية

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

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

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

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

3.1 تهيئة جلسة سبارك (SparkSession) وضبط التكوين

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

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

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

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName(“NegativeFilteringDemo”).master(“local[*]”).config(“spark.driver.memory”, “2g”).getOrCreate()

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

3.2 تصميم مصفوفة البيانات الأولية وتسمية الأعمدة المعيارية

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

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

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

3.3 بناء إطار البيانات (DataFrame) والتحقق من حالته الأولية

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

data_records = [(“Mavs”, 112), (“Cavs”, 98), (“Nets”, 105), (“Kings”, 115), (“Spurs”, 89)]
column_identifiers = [“team”, “points”]
df_raw = spark.createDataFrame(data_records, schema=column_identifiers)

تسمح معاينة إطار البيانات عبر استدعاء دالة العرض بفحص الحالة الأولية للسجلات والتأكد من نجاح عملية التوزيع الهيكلي:

df_raw.show()
df_raw.printSchema()

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

4. تطبيق التصفية الاستبعادية وتحليل النتائج المستخلصة

4.1 التنفيذ الإجرائي لمرشح استبعاد الفرق الحاوية على المقطع ‘avs’

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

df_excluded = df_raw.filter(~df_raw.team.contains(‘avs’))
df_excluded.show()

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

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

4.2 التحليل المقارن للسجلات قبل المعالجة وبعدها

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

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

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

4.3 التحقق من سلامة البيانات الرقمية المقترنة (النقاط)

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

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

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

5. المناهج البرمجية البديلة لتحقيق شرط «لا يحتوي على»

5.1 استخدام استعلامات SQL الصريحة مع عامل NOT LIKE

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

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

df_raw.createOrReplaceTempView(“teams_view”)
df_sql_filtered = spark.sql(“SELECT * FROM teams_view WHERE team NOT LIKE ‘%avs%'”)

يتميز هذا الأسلوب بوضوحه الدلالي العالي وقابليته السريعة للمراجعة من قبل محللي الأعمال غير المتخصصين في تفاصيل بايثون الدقيقة.

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

5.2 التوظيف العكسي للتعبيرات النمطية عبر الدالة rlike()

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

يتحقق شرط «لا يحتوي على» في هذا السياق عبر تطبيق معامل النفي التكميلي ذاته على التعبير النمطي المستدعى من خلال الدالة، على النحو الموضح في الشيفرة التالية:

df_regex_filtered = df_raw.filter(~df_raw.team.rlike(“avs”))

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

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

5.3 استخدام الدالة المعيارية col() مع مشغل النفي المنطقي

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

from pyspark.sql.functions import col
df_col_filtered = df_raw.filter(~col(“team”).contains(“avs”))

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

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

6. إدارة المعضلات المنطقية المرتبطة بالقيم المفقودة (Null Values)

6.1 السلوك المنطقي الثلاثي (Three-Valued Logic) لقيم Null في عمليات النصوص

تستند محركات معالجة البيانات الحديثة، ومن ضمنها محرك سبارك، إلى المنطق البولياني ثلاثي القيم (Three-Valued Logic – 3VL) المستمد من معايير لغة الاستعلام المهيكلة الدولية، والذي يتعامل مع القيم المنطقية عبر ثلاث حالات متباينة: الصواب، والخطأ، والمجهول. ولا تعبر القيمة المفقودة أو المنعدمة في هذا السياق عن سلسلة نصية فارغة أو قيمة صفرية، بل تشير دلالياً إلى غياب تام للبيانات أو جهل بحالتها الحقيقية، مما يفرض سلوكاً حسابياً خاصاً يتجاوز المنطق الثنائي الكلاسيكي المعتمد في معظم لغات البرمجة العامة.

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

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

6.2 ظاهرة الفقدان الصامت للبيانات غير المكتملة أثناء التصفية

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

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

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

6.3 استراتيجيات التحصين المنطقي للحفاظ على القيم الفارغة

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

from pyspark.sql.functions import col
df_safe_filter = df_raw.filter((~col(“team”).contains(“avs”)) | col(“team”).isNull())

توفر هذه الصياغة المحصنة حماية كاملة للسجلات الناقصة وتضمن استمرارها عبر مسار المعالجة دون إسقاط غير مبرر.

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

from pyspark.sql.functions import coalesce, lit
df_coalesce_filter = df_raw.filter(~coalesce(col(“team”), lit(“UNKNOWN”)).contains(“avs”))

يضمن هذا الإجراء تحويل المنطق ثلاثي القيم إلى منطق ثنائي حاسم يمنع تدفق القيمة المجهولة إلى معالج التصفية النهائي.

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

7. التعامل مع حساسية حالة الأحرف والشروط المركبة المتعددة

7.1 معالجة حساسية حالة الأحرف (Case Sensitivity) في السلاسل النصية

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

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

from pyspark.sql.functions import col, lower
df_case_insensitive = df_raw.filter(~lower(col(“team”)).contains(“avs”))

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

df_regex_case = df_raw.filter(~col(“team”).rlike(“(?i)avs”))

وتضمن هذه المناهج البرمجية صياغة شروط استبعاد منيعة تحول دون تسرب أي بيانات غير مرغوبة نتيجة تباينات التدوين الإملائي في مصادر البيانات المتباينة.

7.2 استبعاد مقاطع نصية متعددة بالتزامن (Multiple Substrings)

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

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

df_multi_excluded = df_raw.filter((~col(“team”).contains(“avs”)) & (~col(“team”).contains(“ets”)))

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

ولبناء حلول برمجية ديناميكية تتكيف مع التغير المستمر في القوائم المحظورة دون الحاجة لتعديل الكود المصدري يدوياً، يمكن توظيف الدوال البرمجية المتكررة من مكتبة الأدوات الوظيفية في بايثون لتوليد تعبير الترشيح المدمج آلياً انطلاقاً من مصفوفة مدخلات نصية:

from functools import reduce
import operator
blacklisted_patterns = [“avs”, “ets”, “pur”]
combined_condition = reduce(operator.and_, [~col(“team”).contains(p) for p in blacklisted_patterns])
df_dynamic_filtered = df_raw.filter(combined_condition)

تمنح هذه المنهجية خطوط أنابيب استخراج وتحويل البيانات مرونة استثنائية وقدرة فائقة على الصيانة والتطوير المؤسسي.

7.3 الموازنة المنطقية بين عوامل العطف (AND) والفصل (OR)

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

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

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

8. الأداء الداخلي وتحسين خطة التنفيذ في محرك كاتاليست (Catalyst Optimizer)

8.1 كيف يترجم محرك كاتاليست الشروط المعكوسة إلى خطط تنفيذية

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

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

تتوج هذه السلسلة باختيار الخطة الفيزيائية المثلى (Physical Plan) وتمريرها إلى محرك توليد الأكواد متكامل الوظائف (Whole-Stage Code Generation)، والذي يترجم شجرة التعبيرات المنطقية المعقدة بما تتضمنه من شروط تصفية مستبعدة إلى كود جافا بايتكود أصيل يُنفذ مباشرة داخل الذاكرة الافتراضية. ويحول هذا التوليد البرمجي المباشر دون الحاجة إلى استدعاءات افتراضية مكررة للدوال، محققاً أداءً يقترب من سرعة تنفيذ التطبيقات المجمعة بلغة سي الصافية، وهو ما يفسر الكفاءة العالية لمحرك سبارك في إدارة التحويلات النصية الضخمة.

8.2 مفهوم دفع المرشح لأسفل (Predicate Pushdown) وأثره مع النفي

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

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

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

8.3 تحسين استهلاك الذاكرة وتجنب اختناقات المعالجة (Bottlenecks)

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

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

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

9. الأخطاء البرمجية الشائعة وطرق التشخيص والتصحيح

9.1 الخلط بين عامل النفي اللغوي ‘not’ وعامل البتات ‘~’

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

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

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

9.2 أخطاء التوافقية النوعية عند تمرير قيم غير نصية

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

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

from pyspark.sql.functions import col
df_casted = df_raw.filter(~col(“points”).cast(“string”).contains(“11”))

تضمن هذه المعالجة تحويل الأرقام إلى متواليات محرفية قابلة للمسح النصي دون عوائق.

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

9.3 استكشاف أخطاء الأداء عبر دالة explain()

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

df_excluded.explain(True)

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

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

10. دراسات حالة وسيناريوهات تطبيقية في معالجة البيانات الضخمة

10.1 تنقية سجلات الويب واستبعاد حركة مرور عناكب الزحف البرمجية

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

يمثل حقل وكيل المستخدم (User-Agent) المعيار الأساسي لفرز هذه الزيارات وتنقيتها؛ حيث تسجل البرمجيات الآلية هوياتها التعريفية ضمن هذا الحقل النصي بأسماء صريحة ومقاطع دالة تحظرها المنصات عند استخلاص مؤشرات التحليل البشري. ويتطلب بناء خط معالجة نقي استخدام شرط «لا يحتوي على» لاستبعاد أي سجل يحمل حقل وكيل المستخدم الخاص به مقاطع فرعية معينة، كما توضح الشيفرة التالية:

from pyspark.sql.functions import col, lower
df_clean_logs = df_web_logs.filter(
~lower(col(“user_agent”)).contains(“bot”) &
~lower(col(“user_agent”)).contains(“spider”) &
~lower(col(“user_agent”)).contains(“crawler”)
)

يضمن هذا الإجراء إقصاء حركة المرور الاصطناعية على نحو استباقي وموثوق.

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

10.2 فرز وتطهير البيانات المالية واستبعاد المعاملات الملغاة

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

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

from pyspark.sql.functions import col, upper
df_audited_transactions = df_financial_records.filter(
~upper(col(“transaction_desc”)).contains(“VOID”) &
~upper(col(“transaction_desc”)).contains(“TEST”) &
~upper(col(“transaction_desc”)).contains(“REVERSAL”)
)

يوفر هذا الفرز الصارم تطهيراً وافياً يمتثل للمعايير المحاسبية القياسية.

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

10.3 المعايير المتقدمة لكتابة كود سبارك قابل للصيانة والتطوير

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

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

from pyspark.sql import DataFrame, Column
from pyspark.sql.functions import col

def exclude_substrings(target_df: DataFrame, column_name: str, forbidden_patterns: list) -> DataFrame:
condition = None
for pattern in forbidden_patterns:
rule = ~col(column_name).contains(pattern)
condition = rule if condition is None else condition & rule
return target_df.filter(condition) if condition is not None else target_df

تضمن هذه الدالة توحيد منطق الاستبعاد وسهولة تطبيقه عبر كافة جداول المنظومة بمرونة مطلقة.

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

خاتمة

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

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

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

المراجع

  • Armbrust, M., Xin, R. S., Lian, C., Huai, Y., Liu, D., Bradley, J. K., Meng, X., Kaftan, T., Franklin, M. J., Ghodsi, A., & Zaharia, M. (2015). Spark SQL: Relational data processing in Spark. In Proceedings of the 2015 ACM SIGMOD International Conference on Management of Data (pp. 1383–1394). Association for Computing Machinery. https://doi.org/10.1145/2723372.2742797
  • Zaharia, M., Chowdhury, M., Franklin, M. J., Shenker, S., & Stoica, I. (2010). Spark: Cluster computing with working sets. In Proceedings of the 2nd USENIX Conference on Hot Topics in Cloud Computing (HotCloud ’10) (pp. 1–7). USENIX Association.
  • Zaharia, M., Chowdhury, M., Das, T., Dave, A., Ma, J., McCauley, M., Franklin, M. J., Shenker, S., & Stoica, I. (2012). Resilient distributed datasets: A fault-tolerant abstraction for in-memory cluster computing. In Proceedings of the 9th USENIX Conference on Networked Systems Design and Implementation (NSDI ’12) (pp. 15–28). USENIX Association.
  • Chambers, B., & Zaharia, M. (2018). Spark: The definitive guide: Big data processing made simple. O’Reilly Media.
  • Karau, H., & Warren, R. (2017). High performance Spark: Best practices for scaling and optimizing Apache Spark. O’Reilly Media.
  • Apache Software Foundation. (2023). PySpark documentation: pyspark.sql.Column.contains. Apache Spark Official Documentation. https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.Column.contains.html
★

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

5.0 / 5 • 7 تقييمات

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

looti, M. (2026, أكتوبر 24). باي سبارك: كيفية التصفية لـ «لا يحتوي على». عرب سايكلوجي. https://arabpsychology.com/statistics/pyspark-filter-not-contains/
looti, Mohammed. “باي سبارك: كيفية التصفية لـ «لا يحتوي على».” عرب سايكلوجي, 24 أكتوبر 2026, https://arabpsychology.com/statistics/pyspark-filter-not-contains/.
looti, Mohammed. “باي سبارك: كيفية التصفية لـ «لا يحتوي على».” عرب سايكلوجي. أكتوبر 24, 2026. https://arabpsychology.com/statistics/pyspark-filter-not-contains/.