يشهد العصر الرقمي الحالي تدفقاً غير مسبوق للبيانات الضخمة غير المهيكلة وشبه المهيكلة، حيث تمثل النصوص النسبة الكبرى من البيانات المتولدة عبر المنصات الرقمية، وسجلات الخوادم، وشبكات التواصل الاجتماعي، وأنظمة المعاملات المالية. وفي ظل عجز النظم التقليدية وقواعد البيانات العلائقية المركزية عن استيعاب ومعالجة هذه الحجوم الهائلة بكفاءة مقبولة، برزت الحوسبة الموزعة كحل بنيوي حتمي يتيح تجزئة البيانات ومعالجتها بالتوازي عبر مجموعات عمل مؤلفة من خوادم متعددة. وضمن هذا المضمار التقني المتطور، فرض إطار عمل Apache Spark نفسه كأحد أكثر الحلول البرمجية كفاءة واستقراراً لمعالجة وتحليل البيانات الضخمة في الذاكرة الحية، متجاوزاً القيود الزمنية والحسابية التي كانت تفرضها الأطر السابقة مثل MapReduce في بيئات التخزين التقليدية.
تعد مكتبة باي سبارك (PySpark)، وهي واجهة برمجة التطبيقات المكتوبة بلغة بايثون لإطار عمل أباتشي سبارك، حلقة الوصل الحيوية التي تجمع بين مرونة وبساطة بايثون التعبيرية وبين القوة الحسابية الخارقة لمحرك سبارك الموزع المكتوب بلغة سكالا. وتعتبر تصفية السلاسل النصية واستخلاص الأنماط المحددة إحدى الركائز التشغيلية الأكثر تكراراً في خطوط أنابيب هندسة البيانات؛ إذ يتوقف نجاح المراحل اللاحقة—سواء تعلقت بالتحليلات التنبؤية، أو بناء لوحات المؤشرات الإحصائية، أو تدريب نماذج التعلم الآلي—على نقاء البيانات المدخلة وجودة تصفيتها. وهنا تبرز دالة التضمين النصي الفرعي، المعروفة بـ contains، كإحدى الأدوات البرمجية الأساسية التي توفر للمهندسين والمحللين وسيلة سريعة وفعالة لمطابقة السلاسل النصية واستخراج السجلات المطلوبة من بين مليارات الصفوف الموزعة بدقة متناهية.
يهدف هذا المقال الأكاديمي الموسع إلى تقديم تشريح تحليلي وشامل لكيفية تصفية البيانات النصية باستخدام دالة التضمين النصي في باي سبارك. سنتناول الأسس النظرية والمعمارية التي تجعل من هذه العملية ركيزة أساسية في معالجة البيانات، ونستعرض بالتحليل المقارن صيغ الاستدعاء البرمجي، والتكافؤ الوظيفي بين دوال التصفية المختلفة، وآليات تحسين الأداء على مستوى محرك الاستعلامات الداخلي، إضافة إلى مناقشة التحديات العملية المعقدة مثل التعامل مع القيم المعدومة، وحساسية حالة الأحرف، ودعم النصوص متعددة اللغات. ومن خلال استقصاء أفضل الممارسات المتبعة في البيئات الإنتاجية، يشكل هذا الدليل مرجعاً متكاملاً للمطورين ومهندسي البيانات الساعين إلى تحقيق أعلى درجات الكفاءة والموثوقية في استعلاماتهم الموزعة.
1. مقدمة إلى إطار عمل باي سبارك وتصفية البيانات النصية
1.1 أهمية تصفية النصوص في بيئات الحوسبة الموزعة
تشكل معالجة البيانات النصية الضخمة داخل مجموعات العمل الموزعة تحدياً حاسوبياً مركباً، إذ تتجاوز متطلباتها فحص السلاسل الثنائية البسيطة إلى استهلاك مكثف للذاكرة العشوائية ودورات وحدة المعالجة المركزية عبر عقد حوسبة متعددة. عندما يتم توزيع مجموعات البيانات الكبيرة عبر مئات العقد، فإن كل عملية فحص نصي غير محسوبة قد تؤدي إلى اختناقات تشغيلية حادة تعوق إنجاز المهام في الزمن الحقيقي. تتضاعف هذه التحديات الحسابية عندما تتضمن النصوص تباينات في الأطوال، وترميزات معقدة، ومحارف خاصة تتطلب معالجة دقيقة لكل بايت على حدة، مما يجعل فحص السلاسل النصية على نطاق واسع عملية مكلفة مقارنة بالعمليات الحسابية الرقمية الأساسية.
تتجلى الأهمية الجوهرية للتصفية المبكرة للنصوص في قدرتها الفائقة على تقليل حجم البيانات المتدفقة عبر الشبكة الداخلية لمجموعة العمل، وهي الظاهرة التقنية المعروفة باختناق نقل البيانات. إن استبعاد السجلات غير ذات الصلة في أبكر نقطة ممكنة داخل خط أنابيب المعالجة يحول دون انتقال ملايين الصفوف النصية الزائدة بين العقد أثناء مراحل الخلط والتجميع اللاحقة. يقلل هذا التقليم البياني الاستباقي من الإجهاد الواقع على وسائط التخزين وشبكة الاتصال، ويسمح للذاكرة الحية بالاحتفاظ فقط بالبيانات الفعالة والمؤثرة، مما ينعكس بشكل مباشر على تسريع زمن التنفيذ الإجمالي للاستعلامات المعقدة وتحسين كفاءة استخدام الموارد المشتركة.
علاوة على ذلك، ترتبط تصفية البيانات النصية بحماية استقرار النظام البيئي للحوسبة الموزعة بأكمله، حيث يؤدي تراكم الكائنات النصية غير المصفاة إلى تضخم مساحات الذاكرة المخصصة لإدارة الكائنات، مما يطلق دورات متكررة ومستهلكة للوقت لجامع النفايات البرمجية في بيئة جافا الافتراضية. بناءً على ذلك، لا تعد تصفية النصوص مجرد خطوة تمهيدية روتينية في التحليل، بل تمثل استراتيجية وقائية ومعمارية حاسمة تضمن تشغيل خطوط معالجة البيانات الضخمة بأعلى مستويات الاستمرارية والكفاءة الهندسية الممكنة.
1.2 البنية الهيكلية لأطر البيانات في PySpark SQL
ترتكز واجهة أطر البيانات في مكتبة PySpark SQL على مفهوم رياضي وبرمجي متين يتمثل في عدم قابلية الكائنات للتغيير بعد إنشائها. صُممت أطر البيانات لتكون كائنات ثابتة غير قابلة للتعديل اللحظي؛ فكل عملية تصفية، أو تحويل، أو إسقاط للأعمدة لا تؤدي أبداً إلى تعديل إطار البيانات الأصلي القائم في الذاكرة، بل تنتج إطار بيانات جديداً بالكامل يحمل مسار التحويل المنطقي المحدد. يحقق هذا المبدأ استقراراً تشغيلياً هائلاً ويمنع التداخلات والسباقات البرمجية التي قد تنشأ عندما تحاول مهام متزامنة الوصول إلى نفس الكائن وتعديله عبر عقد الحوسبة الموزعة.
يرتبط هذا التصميم المعماري ارتباطاً وثيقاً بآلية التنفيذ الكسول، وهي الفلسفة التشغيلية التي تجعل محرك سبارك يؤجل تنفيذ أي عملية حوسبة فعلية إلى حين استدعاء إجراء صريح يطلب إخراج البيانات أو حفظها، مثل دوال العرض أو الكتابة. عند تطبيق دوال التصفية على إطار البيانات، لا يقوم المحرك بمسح البيانات فوراً، بل يقوم بتسجيل هذه العملية كعقدة جديدة ضمن رسم بياني غير دوري موجه يمثل خطة الاستعلام المنطقية. تتيح هذه الاستراتيجية لمحرك التحسين الداخلي فحص كافة مراحل التحويل المجدولة ككتلة واحدة، وإعادة ترتيب العمليات لدمج شروط التصفية وتحسين مسار التنفيذ قبل ملامسة البيانات المخزنة على الأقراص.
على مستوى التمثيل الكائني الداخلي، يتم التعامل مع الأعمدة النصية ومعاملاتها من خلال فئة كائنات مخصصة تمثل تعبيرات رمزية مجردة بدلاً من قيم حرفية مباشرة. لا يمثل العمود النصي في باي سبارك مجرد مصفوفة خطية من الكلمات المخزنة، بل هو مؤشر منطقي إلى تعبير حسابي يخضع لقواعد التحليل الشجري لمحرك الاستعلام. هذا التجريد المنطقي يتيح للمحرك ربط التعبيرات البرمجية بدوال منخفضة المستوى يتم تحويلها آلياً إلى بايتكود فائق السرعة، مما يوفر بيئة تكاملية متماسكة تجمع بين بساطة الترميز البايثوني وقوة الأداء التحليلي للمحركات المترجمة.
1.3 نظرة عامة على الدالة الفرعية contains وموقعها الوظيفي
تُعرف عملية مطابقة التضمين الفرعي داخل النصوص رياضياً ومنطقياً بأنها دالة ثنائية تقبل سلسلتين من المحارف: السلسلة الأصلية والسلسلة الهدف المراد استقصاء وجودها، وتعيد قيمة منطقية ثنائية تشير إلى تحقق هذا الاحتواء أو نفيه. تنص القاعدة المنطقية على أن التضمين يكون صحيحاً إذا وُجدت إزاحة رقمية معينة داخل السلسلة الأصلية تتطابق عندها المحارف المتتالية تماماً، وبنفس الترتيب الدقيق، مع السلسلة الجزئية المبحوث عنها. يتميز هذا المفهوم بالبساطة والصرامة؛ إذ لا يتطلب استدعاء محركات معالجة التعبيرات النمطية المعقدة، بل يعتمد على عمليات البحث الخطي أو خوارزميات مقارنة النصوص الأساسية الموفرة للطاقة الحاسوبية.
تتموضع دالة التضمين contains وظيفياً ضمن فئة كائنات الأعمدة، وتحديداً ضمن الوحدة البرمجية المسؤولة عن تمثيل الأعمدة في واجهة بايثون. يمنح هذا الموقع الهيكلي الدالة قدرة تشغيلية مميزة؛ فهي ليست دالة عامة تُطبق على مستوى إطار البيانات ككل، بل هي معامل دلالي يُستدعى مباشرة بواسطة كائن العمود لتوليد تعبير شرطي بولياني. هذا التصميم يسمح بدمج الدالة بسلاسة متناهية داخل مختلف الاستعلامات المنطقية، سواء أكانت استعلامات تصفية بسيطة لصفوف محددة، أو تعبيرات فرز مشروطة، أو حتى عمليات توليد لأعمدة جديدة تعتمد على حالة الاحتواء النصي.
عند إجراء مقارنة أولية بين عمليات المطابقة الجزئية القائمة على التضمين وعمليات المطابقة التامة، يظهر بوضوح التباين الجوهري في نطاق النتائج المسترجعة والتكلفة الحسابية المترتبة. تتطلب المطابقة التامة فحص تساوي الأطوال وتطابق كافة المحارف من البداية إلى النهاية، وهي عملية تنتهي غالباً بمجرد أول تباين محرفي. في المقابل، تفرض المطابقة الجزئية فحص احتمالية ظهور السلسلة الفرعية في أي موضع من مواضع السلسلة الأصلية، مما يجعلها أكثر مرونة وشمولاً في التقاط السجلات التي تشوبها إضافات نصية أو بادئات ولواحق، مع الحفاظ في الوقت عينه على كفاءة زمنية متفوقة بفضل خلوها من التعقيد الرياضي المرتبط بالتعبيرات النمطية المفتوحة.
2. الصيغة التركيبية والمفاهيم الأساسية لدالة contains
2.1 التشريح الدلالي والبرمجي لدالة Column.contains()
تخضع دالة التضمين النصي الخاصة بالأعمدة لقواعد تركيبية ودلالية دقيقة تضمن اتساقها مع معايير واجهات برمجة التطبيقات في الحوسبة الموزعة. تستقبل الدالة معاملاً أساسياً يمثل السلسلة النصية الفرعية المبحوث عنها، والتي تكون في غالبية السيناريوهات التطبيقية عبارة عن قيمة نصية ثابتة ومباشرة، ومع ذلك فإن المحرك يسمح بأن يكون المعامل كائناً يعود لعمود نصي آخر، مما يتيح مقارنة عمود بعمود في نفس الصف البرمجي. تتكامل أنواع البيانات المدعومة بشكل رئيسي حول النوع النصي المعياري، حيث يرفض المحرك منطقياً تمرير قيم رقمية أو مصفوفات مركبة كمعاملات فحص دون تحويل صريح مسبق إلى نمط السلاسل الحرفية.
تُرجع دالة التضمين النصي كائناً من نوع عمود بولياني غير مقيد بقيمة منفردة، بل يمثل تعبيراً شرطياً ينتج قيماً منطقية ثنائية لكل صف من صفوف البيانات المعالجة. يتيح هذا النمط التعبيري استخدام مخرجات الدالة كمدخل فوري للعمليات التي تعتمد على الاستدلال المنطقي داخل إطار البيانات. يُترجم هذا التعبير داخلياً إلى عمليات تحقق بدائية سريعة تقيم كل سجل على حدة، مما يمنحه توافقاً تاماً مع منظومة التخطيط الحسابي للمحرك والتي تحول هذه الشروط إلى تعليمات معالجة مجمعة على مستوى المعالج المادي.
تتعدد القواعد البرمجية لاستدعاء الدالة بما يتلاءم مع أسلوب المطور وطبيعة البناء الهندسي للمشروع، حيث يمكن استدعاؤها عبر الإشارة المباشرة إلى اسم العمود المنبثق من كائن إطار البيانات، أو عبر استخدام دالة استدعاء الأعمدة المستقلة الشائعة في بايثون، والتي تمنح الشفرة وضوحاً تجريدياً عالياً. يعزز هذا التنوع الدلالي قابلية القراءة؛ فالاستدعاء المباشر يوفر سرعة في التدوين للاختبارات السريعة، بينما يوفر استدعاء الأعمدة عبر التوابع الرسمية استقراراً كبيراً في المشروعات الضخمة، لاسيما عند التعامل مع أسماء أعمدة تحتوي على مسافات أو رموز خاصة تعيق استخدام الوصول النقطي التقليدي.
2.2 التكافؤ الوظيفي بين دالتي filter() و where()
يلاحظ مطورو البيانات في منظومة أباتشي سبارك وجود دالتين متماثلتين لتصفية الصفوف هما دالة التصفية العامة ودالة الشرط، مما يثير تساؤلات حول الفروق التقنية الكامنة بينهما. يعود الأصل التاريخي لدالة الشرط المستعارة من لغة الاستعلامات البنيوية إلى رغبة مصممي النظام في توفير بيئة عمل مألوفة لمحللي ومهندسي قواعد البيانات التقليديين الذين اعتادوا على كتابة تعبيرات الشروط النصية المألوفة في معايير إس كيو إل، مما سهل انتقال مطوري الأنظمة العلائقية إلى منظومة الحوسبة الموزعة دون الحاجة إلى إعادة تعلم قواعد استعلامية جديدة كلياً.
من الناحية المعمارية والبرمجية البحتة، لا يوجد أي اختلاف على الإطلاق بين الدالتين في محرك سبارك الداخلي؛ إذ إن إحداهما مجرد مرادف دلالي مطابق للأخرى في الشيفرة المصدرية المكتوبة بلغة سكالا. عندما يتلقى محرك التحسين المتقدم، المعروف بمحرك كاتاليست، استعلام التصفية باستخدام أي من الدالتين، فإنه يقوم بتحويلهما إلى نفس العقدة المنطقية الموحدة في شجرة البناء المجردة. هذا التطابق الداخلي يعني أن زمن التنفيذ، واستهلاك الذاكرة، وخطة التشغيل الفيزيائية النهائية تكون متماثلة حرفياً، بغض النظر عن الدالة التي اختار المطور كتابتها في شفرة بايثون الخاصة به.
تستند معايير المفاضلة واختيار إحدى الدالتين في البيئات الاحترافية إلى الرغبة في تعزيز اتساق الشفرة وقابليتها للصيانة على المدى الطويل. يفضل المطورون ذوو الخلفية البرمجية في لغة بايثون ومكتباتها التحليلية الشهيرة استخدام دالة التصفية العامة نظراً لمواءمتها مع التسميات الاصطلاحية السائدة في البرمجة الوظيفية. في المقابل، تميل الفرق التي تركز على التحليلات الهجينة وقواعد البيانات المشتركة إلى استخدام دالة الشرط لتوحيد الرؤية البصرية للاستعلامات وجعلها أقرب ما تكون إلى النصوص القياسية، ويظل الثبات على أسلوب موحد داخل كامل المستودع البرمجي هو المعيار الأهم لمنع التشتت البرمجي.
2.3 حساسية حالة الأحرف في المطابقة النصية الافتراضية
تعمل دالة التضمين النصي وفق سلوك حتمي وصارم فيما يتعلق بحساسية حالة الأحرف اللاتينية، حيث تعامل الحروف الكبيرة ككيانات منفصلة كلياً عن نظيراتها من الحروف الصغيرة. ينبع هذا السلوك من اعتماد المقارنة على الرموز الثنائية والقيم الرقمية المحددة لكل محرف في جداول الترميز العالمية، فالقيمة الرقمية للمحرف الكبير تختلف جوهرياً عن القيمة الرقمية للمحرف الصغير، مما يؤدي إلى فشل التطابق فوراً إذا كان النص المبحوث عنه لا يماثل السجل النصي بدقة متناهية من حيث حالة كل محرف فردي داخل السلسلة.
تخلف هذه الحساسية الافتراضية آثاراً بالغة الأهمية على دقة النتائج المسترجعة في تطبيقات العالم الحقيقي، حيث تتسم البيانات المجمعة من مصادر مفتوحة أو مدخلات المستخدمين بالتفاوت الشديد وعدم التناسق في تنسيق الأحرف. قد يؤدي إغفال هذا التمايز إلى استبعاد غير مقصود لآلاف السجلات الحيوية لمجرد احتوائها على حرف استهلالي كبير، مما يتسبب في تشويه المؤشرات الإحصائية وتدني دقة نماذج البيانات المبنية على تلك المخرجات. علاوة على ذلك، تلعب اختلافات الترميز الثنائي دوراً دقيقاً في تحديد صحة المقارنة، لاسيما عند التعامل مع مجموعات بيانات تتضمن محارف ذات تمثيلات متقاربة بصرياً ولكنها متباينة برمجياً.
تفرض هذه الطبيعة التقنية على مهندسي البيانات اتخاذ تدابير استباقية لضمان موثوقية استعلامات التضمين. تتضمن هذه التدابير فهم القيود الصارمة للدالة وعدم الافتراض المسبق لنقاء النصوص المعالجة، مما يستوجب توحيد صيغ الأعمدة النصية قبل الشروع في التصفية في حال كانت الغاية البرمجية هي استرجاع التضمين بغض النظر عن حالة الأحرف. إن الإدراك العميق لكيفية تفسير المحرك الموزع لكل محرف يسهم بشكل حاسم في تلافي الأخطاء الصامتة التي تفرز مجموعات بيانات ناقصة دون إطلاق أي استثناءات برمجية تحذيرية.
3. التطبيق العملي خطوة بخطوة لتصفية أطر البيانات
3.1 تهيئة جلسة SparkSession وبناء إطار البيانات التجريبي
تبدأ الخطوة العملية الأولى في بيئة باي سبارك بتأسيس جلسة العمل الرئيسية المسؤولة عن إدارة الاتصال بين بيئة بايثون ومحرك الحوسبة الموزع. يتم إنشاء هذه الجلسة باستخدام النمط البنائي المعتمد برمجياً، حيث يتم استدعاء باني الجلسات وتحديد معلمات التشغيل الأساسية مثل اسم التطبيق وعقدة التشغيل الرئيسية ومسارات الذاكرة المخصصة. تمثل هذه الجلسة نقطة الدخول الشاملة لكافة وظائف محرك البيانات، وتتكفل بتهيئة البيئة التحتية وتنسيق عمليات توزيع المهام وإدارة الاتصال عبر الشبكة.
عقب إتمام بناء الجلسة بنجاح، يتطلب التطبيق التجريبي بناء هيكل بيانات اختباري يحتوي على مزيج متوازن من السلاسل النصية المتنوعة، والقيم الرقمية، لتمثيل سيناريو محاكاة لبيانات واقعية تتضمن أسماء كيانات أو فرق رياضية أو سجلات مشتريات. يتم تجميع هذه البيانات أولياً في هيئة قوائم بايثون تحتوي على صفوف محددة، بحيث تضم بعض النصوص السلسلة المبحوث عنها صراحة، بينما تخلو منها صفوف أخرى، مع تعمد إدراج حالات تباين في الحروف ومسافات متنوعة لغرض اختبار دقة الاستجابة البرمجية لخوارزميات التصفية.
يتم تحويل هذه القوائم التقليدية إلى إطار بيانات موزع فائق الكفاءة من خلال استدعاء دالة إنشاء أطر البيانات المدمجة في الجلسة، مع الحرص الأكاديمي على التحديد الصريح للمخطط الهيكلي للبيانات. يحدد المخطط الهيكلي أسماء الأعمدة الدقيقة وأنواعها الحسابية، كالنصي والعددي، مما يجنب النظام التكلفة الزمنية المرتبطة بالاستدلال التلقائي على الأنواع ويضمن توافق بنية الذاكرة مع أفضل ممارسات الحوسبة عالية الأداء في سبارك.
3.2 تنفيذ استعلام التصفية وعرض النتائج المستخرجة
تتحقق عملية التصفية الفعلية من خلال دمج دالة التصفية العامة مع دالة التضمين في تعبير برمجي واحد متماسك؛ إذ يتم تمرير الشرط القائم على فحص عمود نصي محدد لمعرفة ما إذا كان يتضمن مقطعاً نصياً معيناً كمعامل مباشر داخل دالة التصفية. يُنشئ هذا التعبير خطة منطقية جديدة تعبر عن الرغبة في الاحتفاظ فقط بالصفوف التي يتحقق فيها شرط التضمين النصي كقيمة صحيحة، مع إهمال كافة السجلات الأخرى التي لا ينطبق عليها هذا المعيار الدلالي.
نظراً لخاصية التنفيذ الكسول التي تحكم المعمارية التحتية للنظام، فإن كتابة سطر التصفية لا تستدعي في حد ذاتها فحص أي سطر في البيانات المخزنة، بل تظل الخطة مجمدة حتى يتم استدعاء إجراء إخراج صريح مثل دالة العرض النصي. عند تفعيل هذا الإجراء، يشرع المحرك في تقسيم العمل وتوزيع المهام على المنفذين، ليقوم كل منفذ بفحص البيانات التابعة للقطاع المخصص له واسترجاع الأسطر المطابقة فقط، ومن ثم تجميع النتائج وإظهارها في جدول منسق على الشاشة الطرفية للمستخدم بصورة فورية وواضحة.
تكشف مراجعة المخرجات النصية الناتجة عن التصفية دقة العملية الاسترجاعية؛ حيث تتطابق السجلات الظاهرة كلياً مع المعيار المحدد وتغيب السجلات التي لا تحتوي على المقطع المطلوب. يؤكد هذا الإجراء نجاح التعبير الشرطي في عزل النصوص المستهدفة بدقة متناهية، ويعطي المهندس البرهنة الملموسة على أن تعبير التضمين قد أدى وظيفته الدلالية المرجوة دون التأثير على صحة الحقول الأخرى المتجاورة في نفس الصفوف المعادة.
3.3 تحليل الأثر المنطقي للتصفية على بنية إطار البيانات
ينطوي التحليل الهندسي المنهجي لعملية التصفية على تفحص دقيق للمتغيرات الكمية والنوعية التي طرأت على إطار البيانات بعد اكتمال تنفيذ الاستعلام. يتمثل المؤشر الكمي الأول في حساب عدد السجلات المتبقية مقارنة بإجمالي الحجم الأصلي لمجموعة البيانات عبر دوال الإحصاء الصريحة؛ إذ يعكس هذا التناقص الحجمي مدى صرامة أو اتساع شرط التضمين المستخدم، ويقدم للمحلل رؤية استطلاعية حول نسبة انتشار النمط النصي المبحوث عنه داخل العينة الإجمالية للبيانات.
على الصعيد الهيكلي والنوعي، يثبت الفحص البرمجي استمرارية المخطط البياني لإطار البيانات دون أي تغيير؛ فعملية التصفية النصية تؤثر حصرياً على المحور الرأسي للبيانات من خلال تقليص عدد الصفوف، بينما يظل المحور الأفقي محتفظاً بكافة خصائصه الأصلية. تبقى أسماء الأعمدة، وترتيبها، وأنواع بياناتها—سواء كانت نصوصاً أو أعداداً صحيحة أو تواريخ زمنية—مطابقة تماماً للمخطط الهيكلي الذي تم تعريفه عند إنشاء الجلسة، مما يضمن توافق المخرجات المسترجعة مع أي معالجات تالية تعتمد على ثبات المخطط.
يشمل التقييم النوعي كذلك فحص نقاء النتائج المسترجعة والتأكد التام من خلو المخرجات من أي صفوف شاذة أو متسللة لم تحقق الشرط بدقة، والتأكد من عدم إسقاط أي صف مطابق عن طريق الخطأ نتيجة مواضع الكلمة داخل النص، سواء كانت في بداية السلسلة، أو وسطها، أو نهايتها. يبرهن هذا الاستقرار على متانة المنطق الحسابي لدالة التضمين وقدرتها على استخلاص البيانات دون إحداث تشوهات بنيوية في تركيبة الكائنات الموزعة داخل الذاكرة.
4. تقنيات التصفية المتقدمة متعددة الشروط
4.1 الربط المنطقي التراكمي باستخدام معامل العطف (AND)
تتطلب سيناريوهات هندسة البيانات الواقعية في معظم الأحيان تجاوز التصفية البسيطة والتوجه نحو صياغة قيود منطقية مركبة تدمج معايير فحص متعددة في آن واحد. يتم بناء الربط المنطقي التراكمي في باي سبارك بالاعتماد على معامل العطف الثنائي المخصص بدلاً من الكلمات المحجوزة التقليدية؛ حيث يسمح هذا المعامل بدمج تعبيرين بوليانيين أو أكثر لضمان عدم إبقاء أي سجل إلا إذا استوفى كافة الشروط المحددة معاً في نفس لحظة المعالجة الحسابية.
تفرض لغة بايثون قيوداً حاسمة على أسبقية العمليات المنطقية والحسابية عند التعامل مع معاملات البتات المخصصة، مما يجعل استخدام الأقواس الدائرية حول كل تعبير تصفية فردي ضرورة حتمية لا غنى عنها. في حال إغفال هذه الأقواس، يعيد المفسر ترتيب أولويات التقييم المنطقي بشكل خاطئ يسبق فيه تقييم معامل العطف على تقييم المقارنة النصية ذاتها، مما يؤدي فوراً إلى إطلاق أخطاء تركيبية حادة توقف تدفق البرنامج. تضمن الأقواس عزل التعبيرات البرمجية وتقييم كل شرط تضمين ككيان قائم بذاته قبل دمج النتائج البوليانية النهائية.
يتيح هذا النمط التراكمي الجمع المباشر بين تصفية التضمين النصي والشروط العددية أو الزمنية الصارمة ضمن استعلام موحد فائق الكفاءة؛ كأن يتم البحث عن سجلات نصية تحتوي على مقطع محدد بالتزامن مع اشتراط تجاوز القيم الرقمية في عمود مجاور لحد إحصائي معين. يقوم محرك التحسين بدمج هذه الشروط المركبة وتحليلها كحزمة تقييمية واحدة، مما يتيح التخلص الفوري من الصفوف غير المتوافقة وتسريع الوصول إلى النتائج المستهدفة بدقة متكاملة.
4.2 توسيع نطاق البحث باستخدام معامل التخيير (OR)
يبرز معامل التخيير المنطقي كأداة لا غنى عنها عندما تكون الغاية من استعلام التصفية هي توسيع دائرة السجلات المسترجعة لتشمل أنماطاً نصية بديلة أو متعددة الاحتمالات. يُستخدم معامل الخط العمودي الثنائي لتمثيل عملية التخيير، حيث يكفي لتحقق التعبير الإجمالي أن يكون أحد شروط التضمين النصي المفحوصة صحيحاً في الصف المعني، بغض النظر عن حالة الشروط الأخرى المتزامنة معه في ذات التعبير.
تتضح القوة العملية لهذا الأسلوب عند الرغبة في البحث عن سلاسل فرعية متباينة قد تعبر عن نفس الدلالة المعنوية أو مصطلحات رديفة داخل عمود نصي واحد، أو عند استقصاء ظهور نفس المقطع النصي في أي من عمودين مختلفين داخل إطار البيانات. كما هو الحال مع معامل العطف، يظل استخدام الأقواس حول كل جزئية شرطية متطلباً بنيوياً ثابتاً لمنع أخطاء الأسبقية وضمان تقييم البدائل بشكل منطقي سليم يعكس مراد المهندس البرمجي بدقة تامة.
من الناحية الأدائية والحسابية، يفرض التوسع في استخدام شروط التخيير ضغوطاً إضافية على كفاءة المسح وتكلفة المعالجة داخل خوادم الحوسبة؛ إذ يحول التخيير في كثير من الحالات دون قدرة النظام على تطبيق بعض تقنيات التحسين التخطي السريع للملفات، مما يضطر المنفذين إلى إجراء فحص شامل لأجزاء أكبر من البيانات للتحقق من عدم انطباق أي من البدائل المطروحة. يقتضي ذلك من مهندسي البيانات الموازنة الحذرة بين المرونة الاسترجاعية التي يوفرها التخيير وبين التكلفة الزمنية المستهلكة في عمليات المسح الأفقي الواسع.
4.3 عكس منطق الاستعلام باستخدام معامل النفي المنطقي (NOT)
يمثل الاستبعاد النصي وجهاً مكملاً لعمليات البحث والتضمين، حيث تستدعي متطلبات المعالجة أحياناً عزل أو إقصاء كافة السجلات التي تشتمل على كلمات أو أنماط نصية معينة. يُنفذ هذا السلوك المنطقي في باي سبارك باستخدام معامل النفي المنطقي المعروف برمز التلدة، والذي يوضع مباشرة قبل تعبير التضمين ليقوم بعكس القيمة البوليانية الناتجة؛ فتحول القيمة الصحيحة إلى خاطئة وتتحول القيمة الخاطئة إلى صحيحة لكل صف يتم فحصه.
يفرض استخدام معامل النفي فهماً دقيقاً للمنطق ثلاثي القيم الذي تتبعه قواعد البيانات الحديثة عند التعامل مع القيم غير المؤكدة أو المفقودة. إذا واجه معامل النفي قيمة منطقية معدومة ناشئة عن حقل فارغ، فإن النفي لا يحولها إلى قيمة صحيحة، بل تظل القيمة الناتجة معدومة، مما يؤدي إلى استبعاد هذه الصفوف تلقائياً من المخرجات النهائية للتصفية، ما لم يتم إدراج معالجة صريحة لتلك الحالات الاستثنائية لضمان عدم فقدان بيانات غير مقصود أثناء دورات الاستبعاد الإجمالي.
تتعدد التطبيقات الصناعية لاستعلامات النفي النصي، وعلى رأسها تنقية مجموعات البيانات الضخمة من السجلات التالفة، أو استبعاد الرسائل المزعجة والمصطلحات المحظورة، أو إقصاء الحسابات الاختبارية والرموز المؤقتة التي تُدرج عادة أثناء مراحل التطوير والتجريب. يتيح النفي النصي للمهندسين وسيلة موجزة لتنظيف المستودعات البيانية بخطوات برمجية معدودة، ممهداً الطريق لبناء نماذج تحليلية خالية من الشوائب ومستندة فقط إلى البيانات ذات الوثاقة التشغيلية العالية.
5. معالجة القيم المعدومة والبيانات المفقودة
5.1 سلوك دالة contains عند مواجهة القيم الفارغة (Null)
تتعامل المحركات الموزعة مع القيم المعدومة باعتبارها دلالة صريحة على غياب المعلومة أو عدم تحديدها، وليست كرمز لنص فارغ أو مسافة بيضاء منعدمة المحتوى. بناءً على هذا الأساس الرياضي المشتق من المنطق الثلاثي لقواعد البيانات، فإن تطبيق دالة التضمين النصي على حقل يحمل قيمة معدومة لا يثمر قيمة صحيحة ولا قيمة خاطئة، بل ينتج عنه قيمة معدومة منطقية جديدة تعبر عن استحالة الجزم بوجود المقطع المطلوب من عدمه في نص غير موجود أصلاً.
يترتب على هذا التقييم المنطقي استبعاد تلقائي وفوري لكافة الصفوف التي تحتوي على قيم معدومة في عمود الفحص النصي عند تطبيق دوال التصفية والاشتراط؛ إذ تشترط هذه الدوال البرمجية أن تكون النتيجة البوليانية صحيحة حصراً لكي يتم تمرير السجل وإظهاره في النتيجة المسترجعة. يعني ذلك تقنياً أن السجلات ذات الحقول المعدومة ستسقط تماماً كما لو كانت غير محققة للشرط النصي، وهو سلوك قد يخفى على بعض المطورين الذين يتوقعون احتفاظ النظام بالبيانات المفقودة ما لم يُطلب استبعادها صراحة.
من الضروري التمييز التقني الدقيق بين السلاسل النصية الفارغة ذات الطول الصفري وبين القيم المعدومة؛ فالسلسلة الفارغة هي كائن نصي حقيقي تم حجزه في الذاكرة ولكنه لا يحتوي على أي محارف، وتطبيق دالة التضمين عليه ينتج قيمة خاطئة نظامية طالما كان النص المبحوث عنه يحتوي على محارف فعلية. في المقابل، تشير القيمة المعدومة إلى انعدام الكائن من الأساس، مما يبرز أهمية الفرز المفاهيمي بين هذين النوعين لتفادي الوقوع في استنتاجات خاطئة حول سلامة ودقة تدفق البيانات النصية.
5.2 استراتيجيات المعالجة الاستباقية لتجنب فقدان البيانات
يتطلب تفادي السقوط غير المقصود للسجلات النصية المفقودة تبني استراتيجيات استباقية لمعالجة الأعمدة قبل أو أثناء صياغة شروط التصفية. تتمثل إحدى الطرق المباشرة في استخدام دالة التحقق من عدم انعدام القيمة بالتوازي مع شرط التضمين النصي عبر ربطهما بمعاملات منطقية ملائمة؛ مما يضمن إعلام المحرك بالتعامل مع الحالات الفارغة بشكل استثنائي وتحديد مصير الصف في المخرجات بوضوح برمجي لا يقبل الالتباس.
تُعد دالة دمج الحقول، المعروفة بـ coalesce، إحدى أكثر الأدوات كفاءة في هذا المضمار؛ إذ تسمح للمهندس باستبدال القيمة المعدومة بسلسلة نصية بديلة افتراضية بصورة آنية أثناء تقييم التعبير الشرطي دون تعديل البيانات الأصلية المخزنة. يضمن هذا الإجراء سد الثغرات المنطقية عبر تمرير نص بديل، مثل كلمة تدل على المجهول أو سلسلة فارغة، مما يحول دون توليد قيم منطقية معدومة ويجعل دالة التضمين تعمل دائماً على قيم نصية محددة تعيد نتائج بوليانية صريحة وحاسمة.
في خطوط المعالجة الإنتاجية واسعة النطاق، يُفضل تطبيق دوال الملء الشامل للبيانات المفقودة في مراحل التهيئة الأولية لإطار البيانات وقبل الشروع في استعلامات التصفية المعقدة. يؤدي ملء الأعمدة النصية المستهدفة بقيم ثابتة مقدماً إلى تنظيف النسيج البياني الإجمالي، وتقليص التفرعات المنطقية في شروط الاستعلام اللاحقة، مما يسهل قراءة الشفرة ويزيد من كفاءة تنفيذها عبر تقليل الفحوصات الاستثنائية التي يضطر المعالج لإجرائها لكل سجل على حدة.
5.3 بناء شروط تصفية مشروطة باستخدام when و otherwise
تتيح منظومة باي سبارك للمطورين بناء هياكل شرطية متقدمة تماثل جمل التفرع البرمجي التقليدية عبر توظيف الدالتين التكامليتين when و otherwise، واللتين تمكنان من التعامل مع الحالات المعقدة وتصنيف البيانات بناءً على شروط تضمين متعددة. يتميز هذا الأسلوب بالقدرة على تحديد مسارات استجابة متباينة بناءً على وجود المقطع النصي، أو غيابه، أو كونه حقلاً معدوماً، مما يمنح عملية المعالجة مرونة فائقة تتجاوز مجرد الإبقاء على الصف أو حذفه.
يُستخدم هذا البناء الشرطي المتقدم في هندسة مخرجات تصنيفية مشتقة، حيث يمكن إنشاء عمود جديد يسجل علامة مميزة إذا كان النص يحتوي على الكلمة المستهدفة، ويسجل دلالة أخرى إذا كان النص لا يحتويها، مع معالجة الحالات الاستثنائية للقيم الفارغة بتوجيهها إلى تصنيف مستقل ومحدد مسبقاً. يحفظ هذا الأسلوب بنية البيانات الإجمالية دون إسقاط أي صف، مما يوفر للخطوات التحليلية اللاحقة رؤية متكاملة حول توزيع الأنماط النصية وحجم الفاقد في الوقت ذاته.
تسهم هذه الاستراتيجية المشروطة في تقييم دقة النتائج وسلامتها بصورة فائقة، خاصة في مجموعات البيانات غير المتجانسة التي ترد من مصادر متعددة وتتسم بنسب تلوث متباينة. إن توجيه السجلات غير النمطية عبر مسارات فرز دقيقة يمنع التداخلات غير المرغوبة ويحافظ على سلامة خطوط الإنتاج البرمجية، متيحاً للمهندسين تطبيق معايير جودة صارمة ومراقبة الانحرافات البيانية بأسلوب هندسي رصين.
6. المقارنة التحليلية بين دالة contains وبدائل المطابقة الأخرى
6.1 المقارنة بين contains ودالة like المقتبسة من SQL
تستعير بيئة باي سبارك دالة المطابقة التقليدية like من لغة الاستعلامات البنيوية لتوفر آلية مطابقة نصية مألوفة تعتمد على الرموز البديلة مثل علامة النسبة المئوية لتمثيل عدد عشوائي من المحارف، وعلامة الخط السفلي لتمثيل محرف مفرد. عند محاكاة وظيفة التضمين النصي باستخدام هذه الدالة، يضطر المطور إلى تغليف الكلمة المبحوث عنها بعلامات النسبة المئوية من الجهتين للدلالة على إمكانية ظهور المقطع في أي موضع، وهو ما يؤدي نظرياً إلى تحقيق نفس النتيجة المنطقية لدالة التضمين المباشرة.
تتباين الدالتان من حيث الدلالة البرمجية والكفاءة الأدائية المباشرة؛ فدالة التضمين مصممة خصيصاً للبحث عن المقاطع الحرفية الثابتة دون الحاجة إلى تفسير أو تحليل أي رموز نصية بديلة، مما يجعل تنفيذها البرمجي مباشراً وخالياً من أي غموض تركيبي. في المقابل، تتطلب دالة المطابقة النمطية البسيطة من المحرك إجراء فحص أولي للمحارف المدخلة للتأكد من وجود الرموز الخاصة وتفسير موقعها، مما يضيف حملاً حوسبياً متناهي الصغر على مستوى السجل الفردي، لكنه قد يصبح ملموساً عند تطبيقه على مليارات السجلات الموزعة.
تتجه تفضيلات هندسة البرمجيات الحديثة نحو استخدام دالة التضمين المباشرة عند انعدام الحاجة للرموز البديلة، نظراً لكونها توضح نية المطور بصورة صريحة وجلية داخل الشفرة المصدرية دون ترك مجال للشك حول رغبته في التضمين الحرفي. يقلل هذا التوافق مع المعايير البرمجية الصريحة من احتمالية وقوع أخطاء الهروب النصي عند التعامل مع مقاطع تتضمن في أصلها علامات خاصة، مما يجعل دالة التضمين الخيار الأكثر أماناً وموثوقية في استعلامات البحث الحرفي المباشر.
6.2 استخدام التعبيرات النمطية عبر دالتي rlike و regexp_extract
تفتح دالة التعبيرات النمطية rlike آفاقاً برمجية واسعة النطاق لمطابقة الأنماط النصية فائقة التعقيد، متجاوزة قيود المطابقة الحرفية الصارمة لدالة التضمين؛ إذ تتيح البحث عن تراكيب نصية متغيرة تتضمن تنوعات محرفية، أو أرقاماً متسلسلة، أو أنماطاً تركيبية كعناوين البريد الإلكتروني وأرقام الهواتف. تستند هذه الدالة في معالجتها إلى قواعد التعبيرات النمطية القياسية في لغة جافا، مما يمنحها مرونة هائلة في التعبير عن الشروط المنطقية الأكثر صعوبة بأسطر برمجية معدودة.
تقابل هذه المرونة الهائلة تكلفة حسابية باهظة تفرض مقايضة هندسية صارمة بين الاتساع التعبيري واستهلاك الموارد الحوسبية؛ فمحركات التعبيرات النمطية تبني آلات حالة محدودة غير حتمية تتطلب استهلاكاً مكثفاً لدورات المعالج لإجراء المقارنات التكرارية وعمليات الرجوع الخلفي عند فحص السلاسل النصية الطويلة. يترتب على ذلك انخفاض ملحوظ في سرعة معالجة الصفوف وزيادة واضحة في زمن التنفيذ الإجمالي عند مقارنتها بالبساطة والسرعة الفائقة التي تميز دالة التضمين العادية.
يستوجب هذا التباين الحسابي الاحتكام إلى أفضل ممارسات التصميم البرمجي؛ فلا يجوز استخدام دالة التعبيرات النمطية لمجرد التحقق من وجود كلمة فرعية ثابتة ومحددة سلفاً دون وجود تشعبات تركيبية متغيرة. يمثل اللجوء إلى التعبيرات النمطية في حالات البحث الحرفي هدراً غير مبرر للطاقة الحسابية للبيئة الموزعة، مما يفرض اعتماد دالة التضمين كخيار افتراضي أولي، وحصر استخدام الدوال النمطية المتقدمة في الحالات المعقدة التي تعجز الأدوات الأساسية عن معالجتها.
6.3 المقارنة مع استعلامات Spark SQL النصية الصريحة
يتيح محرك سبارك مرونة معمارية في أسلوب التعبير عن التحويلات البرمجية، حيث يمكن صياغة نفس منطق التصفية إما باستخدام واجهة برمجة التطبيقات الموجهة للكائنات في بايثون، أو عبر كتابة استعلامات نصية صريحة تنفذ من خلال دالة تمرير الاستعلامات العامة مع استخدام جملة WHERE التقليدية. في الاستعلامات النصية، يتم التعبير عن التضمين عادة عبر دوال المطابقة أو استخدام دوال الفحص المدمجة في بيئة إس كيو إل، مما يوفر واجهة قريبة جداً من أساليب إدارة قواعد البيانات الكلاسيكية.
تتطابق مخرجات الأسلوبين بصورة كلية على مستوى الأداء الحسابي والتشغيلي بفضل البنية الموحدة لمحرك التحسين كاتاليست؛ فعند تمرير الاستعلام النصي الصريح، يقوم المحرك بتحليله نحوياً وتفكيكه إلى شجرة تعبيرات منطقية تتطابق تماماً مع الشجرة التي تنشئها دوال واجهة بايثون. هذا يعني أن الاختيار بين الأسلوبين لا يخضع لأي اعتبارات تتعلق بالسرعة أو استهلاك الذاكرة، بل يرتبط حصرياً بتفضيلات فريق التطوير وهيكل خط الأنابيب البرمجي العام.
يتميز استخدام واجهة دوال بايثون بقدرته الفائقة على اكتشاف الأخطاء البرمجية أثناء مرحلة التجميع الأولي وكتابة الشفرة، ويوفر تكاملاً وثيقاً مع أدوات التحقق الإملائي البرمجي والتحليل الساكن، فضلاً عن سهولة تجزئة وتوليد الشروط ديناميكياً باستخدام متغيرات لغة بايثون. في المقابل، تبرز الاستعلامات النصية الصريحة كخيار مفضل عند الحاجة لمشاركة الشفرة مع فرق التحليل غير المتخصصة في البرمجة الكائنية، أو عند ترحيل نصوص استعلامات عتيقة ومجهزة سلفاً من منصات بيانات سابقة دون الرغبة في إعادة كتابتها من الصفر.
7. تحسين أداء استعلامات التصفية النصية في بيئات الإنتاج
7.1 دور محرك التحسين Catalyst ومفهوم دفع الشروط للأسفل
يمثل محرك التحسين المدمج كاتاليست العقل المفكر والمدبر لكافة العمليات الحسابية داخل منظومة أباتشي سبارك، حيث يتولى تحويل التعبيرات المنطقية المجردة إلى خطط تنفيذ فيزيائية شديدة التحسين. ومن أبرز الآليات المتقدمة التي يوظفها المحرك في تحسين استعلامات التصفية النصية ما يُعرف اصطلاحاً بدفع الشروط للأسفل (Predicate Pushdown). تقوم هذه التقنية الهندسية على نقل شروط التصفية إلى أعمق نقطة ممكنة في مسار التنفيذ، بحيث يتم تطبيق التصفية مباشرة عند قراءة البيانات من طبقة التخزين المادية وقبل تحميلها وتوزيعها داخل الذاكرة الحية للمحرك الموزع.
يتكامل هذا المفهوم التشغيلي بشكل متناغم واستثنائي مع صيغ الملفات العمودية الحديثة مثل ملفات Apache Parquet وصيغ ORC المتقدمة؛ حيث تحتفظ هذه الصيغ ببيانات وصفية دقيقة وإحصاءات ملخصة عن كل كتلة تخزينية تتضمن القيم الدنيا والقصوى للأعمدة. عند صياغة شروط التصفية، يستغل محرك التحسين هذه البيانات الإحصائية لتجاوز وقراءة الكتل التي تضمن الشروط عدم وجود السجلات المطلوبة فيها، مما يؤدي إلى تقليص هائل في عمليات الإدخال والإخراج عبر وحدات التخزين، وتسريع زمن المسح الإجمالي بمستويات تتجاوز بكثير المعالجة التقليدية للملفات النصية البسيطة.
يتيح فحص المخطط التنفيذي للاستعلام عبر استدعاء دوال الشرح التحليلية للمهندسين إمكانية التحقق والتأكد البصري من تطبيق تقنية دفع الشروط للأسفل بنجاح؛ إذ يُظهر التقرير الناتج المسار التفصيلي للعمليات المنفذة ويوضح ما إذا كان شرط التضمين النصي قد دُفع فعلياً إلى مستوى مرشحات القراءة المادية أو تم إرجاؤه كعملية ترشيح لاحقة في الذاكرة. يمنح هذا التدقيق المعماري فرق العمل القدرة على اكتشاف العوائق التخزينية التي قد تمنع المحرك من استغلال التحسينات المادية، مما يضمن تشغيل الاستعلامات بأقصى طاقة ممكنة.
7.2 تأثير تجزئة البيانات (Partitioning) على كفاءة التصفية
تشكل استراتيجية تجزئة البيانات المادية حجر الزاوية في استقرار وسرعة معالجة البيانات النصية الضخمة عبر المجموعات الموزعة؛ إذ تحدد كيفية توزيع أجزاء إطار البيانات وحجمها مدى التوازن في استهلاك الذاكرة والجهد الحسابي بين عقد المعالجة المختلفة. عند تطبيق تصفية نصية مكثفة تؤدي إلى استبعاد نسب هائلة من السجلات، قد تصبح الأجزاء المتبقية غير متوازنة عددياً، مما يخلق ظاهرة انحراف البيانات حيث تتحمل عقدة حوسبة واحدة معالجة كتلة ضخمة من النتائج بينما تظل العقد الأخرى في حالة خمول غير مستغلة.
تسهم التصفية المحكمة في تجنب مشكلات خلط البيانات عبر الشبكة، وهي العملية الأكثر كلفة واستهلاكاً للوقت في الحوسبة الموزعة، والتي تحدث عندما تضطر العقد إلى تبادل الصفوف لإعادة تجميعها بناءً على مفاتيح معينة. إذا تم تقليم السجلات وتصفيتها باستخدام دالة التضمين قبل الوصول إلى مراحل التجميع والربط، فإن حجم البيانات المراد خلطها عبر الشبكة يتقلص بنسب جذرية، مما يقي النظام من اختناقات تدفق البيانات ويقلل من استهلاك مساحات الأقراص المؤقتة المستخدمة لتخزين مخرجات الخلط الوسيطة.
تفرض التصفية الجذرية مراجعة ضرورية لعدد الأجزاء البيانية بعد اكتمال الاستعلام؛ فإذا أسفرت التصفية عن الاحتفاظ بجزء ضئيل جداً من البيانات الأصلية، فإن الإبقاء على مئات الأجزاء الصغيرة يرهق المحرك بتكاليف تنسيق زائدة وغير مجدية. في مثل هذه الحالات، تبرز أفضلية استخدام دالة تقليص الأجزاء الاندماجية التي تدمج الأجزاء المتقاربة محلياً دون إحداث خلط شامل للبيانات، مع تجنب استدعاء دوال إعادة التقسيم الكاملة إلا في الحالات التي تتطلب موازنة حتمية وشاملة لتوزيع البيانات قبل مهام معقدة لاحقة.
7.3 إدارة الذاكرة والتخزين المؤقت لأطر البيانات المصفاة
تعد إدارة الموارد التخزينية في الذاكرة الحية أحد أهم عوامل النجاح في بيئات الإنتاج الفعلية؛ حيث يواجه المهندسون باستمرار معضلة الموازنة بين إعادة حساب الاستعلامات المنطقية مراراً وبين تخزين النتائج مؤقتاً في الذاكرة لتسريع الوصول اللاحق. عند استخراج إطار بيانات مصفى عبر شروط تضمين نصية دقيقة، وكانت هناك حاجة لإعادة استخدام هذا الإطار المشتق في عمليات حسابية متعددة، مثل حساب إحصاءات وتدريب نماذج في آن واحد، فإن استدعاء دوال التخزين المؤقت يصبح قراراً معمارياً استراتيجياً فائق الأهمية.
يحذر الخبراء من مخاطر التخزين المؤقت العشوائي وغير المدروس لأطر البيانات النصية؛ فالنصوص تستهلك مساحات هائلة من الذاكرة مقارنة بالبيانات الرقمية المجردة، والإفراط في تخزين النتائج المصفاة دون تحريرها لاحقاً يؤدي إلى استنزاف الذاكرة المخصصة للتنفيذ، مما يضطر النظام إلى تفريغ الكائنات إلى وسائط التخزين البطيئة أو التسبب في انهيار المهام بسبب نفاد الذاكرة. يجب أن تقترن كل عملية تخزين مؤقت بفهم دقيق لدورة حياة البيانات، والحرص الصارم على إلغاء التخزين بمجرد انتهاء العمليات المشتركة التي استوجبته.
توفر واجهة المستخدم الرسومية المدمجة في أباتشي سبارك أداة مراقبة بصرية حيوية تتيح لمهندسي البيانات تتبع استهلاك الذاكرة وسلوك التخزين المؤقت في الزمن الحقيقي؛ حيث يمكن من خلالها رصد مساحات الذاكرة المشغولة بكل جزء مخزن، ونسب الوصول الناجح للبيانات المؤقتة، وأزمنة تنفيذ المهام الفردية لكل مرحلة من مراحل التصفية. تتيح هذه المتابعة الحثيثة تحديد الاختناقات الأدائية والتحقق من كفاءة استراتيجيات إدارة الذاكرة المطبقة، وضمان بقاء استهلاك الموارد ضمن الحدود الآمنة للمنظومة الحوسبية.
8. معالجة الحالات الخاصة والتخصيص النصي المتقدم
8.1 تنفيذ التصفية غير الحساسة لحالة الأحرف (Case-Insensitive)
تشكل حساسية الأحرف الافتراضية في دالة التضمين عائقاً عملياً كبيراً أمام دقة الاستعلامات في البيئات التي تتسم مدخلاتها بعدم الانضباط في كتابة الحروف اللاتينية؛ مما يستدعي هندسة استعلامات مخصصة قادرة على تجاوز هذا التمايز وتحقيق مطابقة شاملة بغض النظر عن كون الحرف كبيراً أو صغيراً. يتحقق هذا التخصيص الأكثر شيوعاً واستقراراً عبر توظيف الدوال النصية المدمجة لتوحيد حالة الأحرف في العمود المستهدف بالكامل قبل تطبيق فحص التضمين عليه.
تعتمد هذه التقنية البرمجية على تحويل كافة محارف العمود النصي إلى صيغة الحروف الصغيرة الموحدة باستخدام دالة التصغير، أو إلى صيغة الحروف الكبيرة عبر دالة التكبير، مع تحويل السلسلة النصية الفرعية المبحوث عنها إلى نفس الصيغة المطابقة تماماً. ينتج عن هذا التوحيد الثنائي بيئة مقارنة متجانسة يستحيل فيها إخفاق التطابق بسبب اختلاف حالة حرف استهلالي أو كلمة عشوائية، مما يضمن استرجاع كافة السجلات ذات الصلة المعنوية بكفاءة وموثوقية بالغة.
ينبغي الإشارة من زاوية هندسة الأداء إلى أن توحيد صيغ الأعمدة عبر دوال التكبير والتصغير يستلزم إجراء معالجة تحويلية لكل محرف في كافة صفوف العمود قبل إتمام فحص التضمين، وهو ما يستهلك جهداً إضافياً من المعالج المركزي مقارنة بالمقارنة المباشرة البسيطة. ومع ذلك، تظل هذه التكلفة الحسابية ضمن الحدود الهندسية المقبولة في الغالبية العظمى من خطوط الإنتاج، حيث يُفضل تحمل هذا الحمل الطفيف على المخاطرة بإنتاج مخرجات بيانات ناقصة أو غير دقيقة تشوه القرارات اللاحقة للمؤسسة.
8.2 التعامل مع المسافات البيضاء والرموز الخفية
تعد المسافات البيضاء الفائضة والمحارف غير المرئية من أكثر مصادر التشويش والأخطاء الصامتة في معالجة البيانات النصية الموزعة؛ إذ يؤدي وجود مسافة بيضاء غير متوقعة في بداية النص المبحوث عنه أو نهايته، أو داخل السلسلة المستهدفة في السجل، إلى فشل ذريع وغير مبرر ظاهرياً لدالة التضمين النصي. لا تقتصر هذه الشوائب على المسافات العادية، بل تمتد لتشمل علامات الجدولة، ومحارف الهروب، وفواصل الأسطر الخفية التي تتسرب أثناء استخراج البيانات من مصادر الويب أو الأنظمة القديمة.
تقتضي الممارسات الهندسية الصارمة تطهير الأعمدة النصية من هذه الزوائد باستخدام دوال التشذيب المخصصة؛ حيث تتكفل الدالة العامة للتشذيب بإزالة كافة المسافات الزائدة من طرفي النص، بينما توفر الدوال المتخصصة بالجانب الأيمن أو الأيسر إمكانية إزالة الشوائب من جهة محددة وفق ما تمليه متطلبات التحليل. يمنع هذا التطهير الاستباقي تشوه المقارنات الحرفية ويضمن أن تركز دالة التضمين على المتن الفعلي للنص دون أن تعرقلها مسافات فارغة غير ذات دلالة.
يمتد التخصيص المتقدم لمعالجة المسافات ليشمل التطهير الداخلي للنصوص وإزالة علامات الترقيم أو المحارف الخاصة غير القابلة للطباعة والتي قد تتوسط السلسلة النصية وتقطع تواصل المقطع المبحوث عنه. يمكن تحقيق ذلك بتوظيف دوال الاستبدال النصي الشامل لتنقية الجمل وتحويل المسافات المتعددة المتتالية إلى مسافة أحادية موحدة قبل تطبيق شروط التضمين، مما يرفع من مرونة التصفية ويضمن وصول الاستعلامات إلى النصوص المكتوبة بأساليب تحريرية غير منضبطة.
8.3 مطابقة النصوص متعددة اللغات ودعم محارف Unicode
تفرض العولمة الرقمية وتعدد المصادر البيانية التعامل مع أطر بيانات نصية تحتوي على محارف مشكولة، ولغات حية غير لاتينية كاللسان العربي والصيني، مما يضع استعلامات التصفية أمام تحديات تقنية فريدة ترتبط بأنماط الترميز والتشفير الرقمي للمحارف. يتعامل محرك أباتشي سبارك افتراضياً مع النصوص بصيغة الترميز الموحد العالمي UTF-8، مما يوفر توافقية برمجية قياسية عالية لمعالجة وتخزين السلاسل النصية باختلاف مشاربها اللغوية دون فقدان للبيانات.
تنبع الصعوبات التشغيلية في اللغات متعددة التراكيب من تنوع الأشكال البصرية للمحرف الواحد واختلاف أسلوب تمثيله الثنائي؛ ففي اللغة العربية على سبيل المثال، قد يُكتب الألف بأشكال همزات مختلفة، أو قد تتخلل الحروف علامات تشكيل تؤدي برمجياً إلى إحباط عملية التضمين النصي إذا لم يتطابق التشكيل أو رسم الهمزة حرفياً بين السلسلة المبحوث عنها والنص المخزن. يتطلب تلافي هذه المعضلة تطبيق مراحل معالجة تمهيدية متقدمة تقوم على تسوية المحارف وتجريدها من علامات التشكيل وتوحيد الأنماط البصرية المتعددة في نمط رمزي موحد ومستقر.
يستلزم النجاح في بيئات البيانات ثنائية اللغة أو متعددة اللهجات التحقق الدقيق من سلامة الترميز الثنائي عبر كافة مراحل خط الأنابيب، والتأكد من عدم تعرض النصوص لتشوهات التشفير أثناء عمليات القراءة والتحويل النصي الوسيط. يضمن تطبيق هذه المعايير الهندسية الدقيقة بقاء دالة التضمين قادرة على أداء وظيفتها المنطقية بدقة متساوية، سواء أكانت السجلات المعالجة نصوصاً مشرقية أو سلاسل تقنية لاتينية، مما يضفي على المنظومة الحوسبية طابعاً عالمياً وموثوقية تحليلية راسخة.
9. دمج عمليات التصفية ضمن خطوط معالجة البيانات الضخمة
9.1 تطبيق دالة contains في مراحل الاستخراج والتحويل والتحميل (ETL)
تشكل عمليات الاستخراج والتحويل والتحميل البنية التحتية الأساسية لمستودعات وبحيرات البيانات الكبرى في المؤسسات، وتلعب دالة التضمين النصي دوراً وظيفياً محورياً في هذه الخطوط التشغيلية لتنظيم حركة تدفق البيانات الخام وفرزها وتنقيتها قبل إتاحتها للمستهلكين النهائيين. يتم توظيف التضمين النصي في مرحلة التحويل الأولية كأداة تصنيف محورية لفصل التدفقات البيانية الكبرى وتوجيه السجلات النصية إلى مسارات معالجة متباينة بناءً على هويتها ومحتواها الدلالي.
تتيح الاستعلامات المبنية على التضمين توجيه السجلات غير المطابقة أو التي تعتريها أخطاء نصية واضحة نحو مسارات مخصصة لحجر البيانات المعطوبة ومراجعتها لاحقاً، بدلاً من إيقاف خط الأنابيب بأكمله أو السماح لهذه الشوائب بالدخول إلى مستودعات البيانات النظيفة. كما تُستخدم الدالة بفعالية لتقسيم السجلات التاريخية أو اليومية الضخمة بناءً على تصنيفات الأعمال المشتقة من النصوص، مما يسمح بحفظ البيانات في مجلدات مقسمة ومفهرسة تسهل من استعلامات القراءة اللاحقة وتوفر تكاليف استهلاك الموارد.
تسهم أتمتة هذه العمليات المتسلسلة ضمن خطوط أنابيب مجدولة ومراقبة بواسطة أدوات تنسيق المهام الموزعة في بناء أنظمة معالجة ذاتية الصيانة؛ حيث تعمل قواعد التضمين النصي كحراس جودة يقومون بفلترة وتعديل مسار السجلات بدقة فائقة وبشكل مستمر على مدار الساعة، مما يوفر للكيانات المؤسسية تدفقاً موثوقاً للبيانات النظيفة الجاهزة للاستخدام في تقارير الأعمال وتطبيقات التحليل الاستراتيجي.
9.2 هندسة الخصائص النصية لنماذج تعلم الآلة (MLlib)
تمثل هندسة الخصائص حلقة الوصل الحاسمة بين البيانات النصية الخام وبين خوارزميات التعلم الآلي الموزعة في مكتبة Spark MLlib؛ إذ تعجز هذه الخوارزميات الرياضية عن استيعاب النصوص بصورتها السردية، وتتطلب تحويلها إلى متجهات وقيم عددية تعبر عن الخصائص الكامنة فيها. وتعتبر دالة التضمين النصي من أبسط وأقوى الأدوات المساهمة في هندسة المؤشرات الثنائية المشتقة التي تعبر عن وجود سمات دلالية محددة داخل الوثائق أو السجلات النصية.
يتم هذا التحويل الهندسي من خلال إنشاء أعمدة رقمية جديدة تأخذ القيمة الثنائية واحد عند تحقق شرط التضمين النصي لكلمات مفتاحية معينة، والقيمة صفر عند غيابها. تُعد هذه المؤشرات الثنائية مدخلات بالغة الأهمية لخوارزميات التصنيف الإحصائي، وتحليل المشاعر، والتنبؤ بسلوكيات المستخدمين؛ حيث تمنح النموذج القدرة على استشعار دلالات قوية ترتبط بوجود كلمات محددة ذات وزن دلالي عالٍ دون الحاجة لبناء قواميس متجهات ضخمة ترهق مساحات الذاكرة.
علاوة على ذلك، تسهم دالة التضمين في تقليص أبعاد البيانات النصية المعقدة عبر تجميع الفئات المتشابهة والمصطلحات الفرعية تحت مظلة مؤشرات موحدة تعبر عن المفهوم العام؛ مما يحد من ظاهرة التشتت الحسابي التي تعاني منها نماذج التعلم الآلي عند مواجهة مئات الآلاف من الكلمات النادرة. يسهل هذا التجريد الهندسي عمل النماذج التنبؤية، ويقلل من متطلبات الذاكرة الحسابية أثناء التدريب، ويزيد من قدرة الخوارزميات على التعميم الإحصائي على بيانات جديدة بدقة وثبات وموثوقية.
9.3 ضمان جودة البيانات والمراقبة المستمرة للمخرجات
يعد ضمان جودة البيانات عملية مستمرة ومتكاملة ترافق كافة مراحل المعالجة داخل خطوط الأنابيب الموزعة وليست مجرد مرحلة ختامية منعزلة؛ وتوظف دالة التضمين النصي في هذا السياق لبناء اختبارات تحقق آلية ومستمرة تراقب صحة البيانات المتدفقة. يمكن هندسة استعلامات فحص دورية تتحقق من احتواء حقول معينة على تراكيب نصية ملزمة، مثل التأكد من احتواء حقول المعاملات المالية على لاحقة محددة تشير إلى اكتمال الدفع، مما يوفر نظام إنذار مبكر يرصد الشذوذ في بنية المدخلات.
تتضمن المراقبة المستمرة تتبع النسب الإحصائية للسجلات التي تحقق شروط التضمين النصي عبر سلاسل زمنية متتالية؛ إذ يشير الانخفاض المفاجئ أو الارتفاع غير المبرر في نسبة الصفوف التي تحتوي على مقطع نصي محدد إلى حدوث تغير جوهري في بنية البيانات الواردة من الأنظمة المصدرية، أو ظهور أخطاء في عمليات الاستخراج الوسيطة. يتيح رصد هذه التغيرات الانجرافية لفرق هندسة البيانات التدخل السريع لإعادة ضبط قواعد التحويل قبل أن تتأثر النماذج النهائية المعتمدة عليها.
يسهم التوثيق الدقيق لمنطق التصفية ومعايير التضمين النصي في تحقيق الامتثال المؤسسي للمعايير الهندسية والرقابية المعتمدة عالمياً؛ إذ يسهل تتبع أسباب استبعاد أو إبقاء سجلات معينة وإبراز المعايير الرياضية والمنطقية التي تحكمت في حركة البيانات. يمنح هذا التدقيق الهندسي منظومة البيانات شفافية كاملة وقابلية للمراجعة والمساءلة، مما يعزز الثقة في المخرجات التحليلية ويضمن اتساقها مع القوانين واللوائح المنظمة لإدارة ومعالجة المعلومات الرقمية.
10. الأخطاء الشائعة وأفضل الممارسات البرمجية
10.1 الأخطاء التركيبية والمنطقية الشائعة وكيفية تصحيحها
يقع العديد من المطورين، لاسيما أولئك المنتقلين حديثاً من بيئة بايثون القياسية إلى باي سبارك، في خطأ شائع يتمثل في الخلط بين معاملات الربط المنطقي المخصصة لمكتبات المعالجة المتوازية وبين الكلمات المفتاحية الأصلية للغة بايثون. إن محاولة استخدام الكلمات التقليدية للربط المنطقي للجمع بين شروط تصفية نصية متعددة تؤدي حتماً إلى إطلاق استثناءات برمجية؛ نظراً لأن هذه الكلمات تحاول تقييم كائن العمود بأكمله كقيمة منطقية مفردة في بايثون بدلاً من توليد تعبير منطقي جديد يتم تطبيقه بالتوازي عبر عناصر العمود الموزع.
يقترن هذا الخطأ بصورة وثيقة بتجاهل إحاطة التعبيرات الشرطية بالأقواس الدائرية عند استخدام المعاملات الثنائية المخصصة؛ وهو ما يربك مفسر اللغة نظراً لارتفاع أسبقية هذه المعاملات على معاملات المقارنة، مما يفرز أخطاء تفسيرية غامضة قد يصعب على المطور غير المتمرس تشخيصها سريعاً. يتمثل الحل التصحيحي الصارم في التعود على تغليف كل شرط فرعي، بما فيه استدعاءات دالة التضمين النصي، بأقواس مستقلة تعزل حدوده وتفرض أسبقية منطقية واضحة تحافظ على سلامة الشفرة وتنفيذها الموزع.
من الأخطاء المنطقية المتكررة كذلك محاولة تطبيق دالة التضمين النصي على أعمدة ذات أنواع بيانية غير نصية، كالأعمدة الرقمية أو حقول التواريخ والوقت، دون إجراء تحويل مسبق لصيغتها نحو السلاسل الحرفية. ترفض المنظومة الحسابية تنفيذ هذه الاستعلامات نظراً لتعارض الأنواع البيانية، مما يستوجب استخدام دوال التحويل الصريح للعمود قبل استدعاء دالة التضمين لضمان توافق الأنواع وتجنب تعطل خطوط المعالجة.
10.2 معايير كتابة شفرات برمجية قابلة للصيانة والقراءة
تكتسب جودة الشفرة المصدرية وقابليتها للصيانة أهمية توازي كفاءة الأداء في المشاريع البرمجية الكبرى التي تديرها فرق عمل متعددة عبر بيئات الحوسبة السحابية. يتطلب تحقيق هذه المعايير تجنب كتابة شروط التصفية في أسطر برمجية بالغة الطول والتعقيد يصعب على المطورين اللاحقين استيعابها أو تعديلها دون مخاطرة، والاعتماد بدلاً من ذلك على تفكيك القيود المنطقية المتشعبة إلى متغيرات شرطية وسيطة ذات أسماء دلالية واضحة تعبر بدقة عن وظيفتها.
يسهم هذا التفكيك المنهجي في إضفاء طابع توثيقي ذاتي على الشفرة المصدرية؛ حيث يُعبر اسم المتغير الوسيط عن المعنى المقصود من شرط التضمين النصي، مما يجعل تجميع الشروط اللاحق داخل دالة التصفية الرئيسية يبدو كنص مقروء وواضح يتوافق مع المعايير المعمارية النظيفة. كما يسهل هذا النهج كتابة اختبارات الوحدة لكل شرط على حدة، وعزل الأخطاء المنطقية وتصحيحها دون الحاجة لتفكيك الشفرة بأكملها، مما يوفر جهداً ووقتاً ثمينين في دورات التطوير والتحديث المستمرة.
يتعين كذلك الالتزام الصارم بإرشادات نمط الشفرات المعتمدة، مثل استخدام المسافات البادئة القياسية، والتسمية المتسقة للأعمدة والمتغيرات، وإدراج تعليقات توضيحية تشرح الغاية الدلالية من استبعاد أو تضمين مقاطع نصية معينة لاسيما عندما تكون تلك المقاطع عبارة عن رموز خاصة أو شفرات داخلية للمؤسسة. تضمن هذه الممارسات استدامة المشروع وقدرة المنظومة البرمجية على استيعاب مطورين جدد دون أي انخفاض في وتيرة الإنتاجية أو جودة المخرجات.
10.3 قائمة التحقق النهائية لنشر استعلامات التصفية في بيئات العمل
يمثل الانتقال باستعلامات تصفية البيانات النصية من مراحل التطوير التجريبية إلى بيئات الإنتاج الحية خطوة حرجة تتطلب إخضاع الشفرة لبروتوكول تحقق ومراجعة هندسية متكاملة لضمان استقرار الأداء ومنع المفاجآت التشغيلية. يجب أن تتصدر قائمة التحقق هذه مراجعة شاملة لكيفية معالجة الاستعلام للقيم المعدومة والفارغة، والتأكد من أن السلوك المعتمد لا يتسبب في إسقاط سجلات هامة بصورة غير مقصودة، مع اختبار متانة الاستعلام في مواجهة تباينات حالة الأحرف والشوائب النصية والمسافات البيضاء.
تتضمن المرحلة التالية من قائمة التحقق قياس استجابة الاستعلام واستهلاكه للذاكرة ووحدة المعالجة المركزية عبر تشغيله على عينات بيانات تمثيلية تحاكي الحجم والتعقيد الفعلي للبيانات الإنتاجية. ينبغي في هذه الخطوة فحص خطة التنفيذ المادية الناتجة والتأكد البصري من تفعيل تقنيات التحسين التلقائي مثل دفع الشروط للأسفل، ومراقبة عدد الأجزاء الناتجة عن التصفية لتجنب مشكلات الأجزاء متناهية الصغر التي ترهق جدول العمليات في سبارك.
تكتمل الجاهزية التشغيلية بالتحقق من ربط الاستعلام بأنظمة المراقبة وتسجيل الأخطاء الموزعة، مما يتيح تتبع أزمنة التنفيذ ومعدلات الخطأ في الزمن الحقيقي وتنبيه المهندسين فور حدوث أي انحراف عن المعدلات الطبيعية. إن الالتزام بهذه الضوابط والمعايير الصارمة يمنح المؤسسات الثقة الكاملة في متانة خطوط أنابيب البيانات الخاصة بها، ويضمن تنفيذ عمليات التصفية النصية بأعلى مستويات الدقة والكفاءة والموثوقية التقنية.
خاتمة
استعرض هذا المقال الموسع دالة التضمين النصي contains في إطار عمل باي سبارك، مبيناً موقعها المحوري كأداة هندسية فعالة وموفرة للموارد في معالجة البيانات النصية الضخمة عبر بيئات الحوسبة الموزعة. لقد تتبعنا المسار الوظيفي للدالة بدءاً من مفاهيم الحوسبة المتوازية والتنفيذ الكسول، مروراً بالتشريح البرمجي والصيغ التعبيرية المتقدمة للربط والنفي والاستبعاد المنطقي، وصولاً إلى استراتيجيات معالجة القيم المعدومة والتكامل المعماري مع محرك التحسين كاتاليست وتقنيات دفع الشروط للأسفل.
أظهر التحليل المقارن بوضوح أن دالة التضمين المباشرة تمثل الخيار الأمثل والأنقى أداءً ودلالة في سيناريوهات البحث الحرفي مقارنة بالبدائل النمطية المستعارة من لغات الاستعلامات أو محركات التعبيرات النمطية المعقدة، مع الاحتفاظ بمرونة فائقة عند دمجها مع دوال توحيد الأحرف والتشذيب لضمان الدقة في البيئات متعددة اللغات والثقافات البيانية. إن الفهم العميق للآليات الداخلية لكيفية تنفيذ هذه العمليات يمثل الفارق الجوهري بين كتابة شفرات تؤدي الغرض ظاهرياً ولكنها ترهق المنظومة الحوسبية، وبين بناء حلول بيانات رصينة وقابلة للتوسع والصيانة تلبي متطلبات البنى التحتية المتطورة لمعالجة البيانات الضخمة في العصر الرقمي الحديث.
المراجع
- 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
- 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.
- 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 9th USENIX Symposium on Networked Systems Design and Implementation (NSDI 12) (pp. 15–28). USENIX Association.
- Zaharia, M., Xin, R. S., Wendell, P., Das, T., Armbrust, M., Dave, A., Meng, X., Rosen, J., Venkataraman, S., Franklin, M. J., Ghodsi, A., Gonzalez, J., Shenker, S., & Stoica, I. (2016). Apache Spark: A unified engine for big data processing. Communications of the ACM, 59(11), 56–65. https://doi.org/10.1145/2934664