Apache Spark / دليل حلول تحريري
تشخيص التحويلات المعيبة والقياسات الغائبة
افصل تحليل المصدر وسلوك ANSI للإصدار المختار ورفض قواعد المجال، قبل تعويض القيم التي فشل تحويلها أوتخفيف إعدادات الحماية.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
تبدأ وظيفة بالإخفاق بخطأ CAST_INVALID_INPUT أوCANNOT_PARSE_TIMESTAMP بعد تغير المصدر أوبيئة التشغيل. وقد تنتهي نسخة أخرى من الوظيفة، لكنها تنتج قيماً أكثر من NULL للطاقة، وتبدو المجاميع أقل من دون إخفاق واضح. احفظ فئة الخطأ الدقيقة والتعبير ومثال المصدر بعد حجب البيانات الحساسة والتكوين الذي رُصد فعلياً.
افهم الأسباب المحتملة
- قد يتضمن المصدر فاصلاً تغير، أوصف رأس دخل في البيانات، أووحدة مختلفة، أواصطلاحاً زمنياً جديداً. يفعّل Spark4.0 سلوك ANSI افتراضياً، فتفشل تحويلات معيبة كانت بيئة أقدم تتحملها. وقد يخفي التحويل المتسامح عدم الصلاحية إذا أُهملت القيم الخام وفئات الرفض.
حدد أين بدأ اختلاف التفسير
قارن مخطط المصدر وإصداره المعتمدين بعقد المنتج الفعلي. تحقق هل استُنتج معرّف مؤلف من أرقام كنوع رقمي، وهل غيرت خيارات CSV مواضع الحقول، وهل تحمل الأوقات إزاحة أومنطقة محلية موثقة. لا تستنتج نوع المدخل من التقرير النهائي المنسق. قد يكون بناء DataFrame كسولاً؛ لذلك قد ينشأ خطأ يظهر عند count أوالكتابة من قراءة أوتحويل سابقين. احفظ أصغر سجل اصطناعي يعيد إظهار اختلاف التفسير، من دون نسخ بيانات عملاء أوالاتصال بالمصدر المهيأ.
احفظ القيمة الخام أثناء اختبار التحويل
يظهر مثال SQL قيمة عشرية صحيحة وتحويلاً فاشلاً بصورة واضحة. استُخدمت try_cast عمداً لفحص القيم، لا لإجازة نشر NULL بوصفها صفراً. احتفظ بالحقل الخام، وميّز المدخل الغائب فعلاً من محتوى موجود لا يمكن تحويله. قد تظل للتحويل بين أزواج أنواع غير مدعومة قيود في التحليل؛ لذلك افحص الخطأ الفعلي، ولا تفترض أن كل استثناء يصبح NULL. الاستعلام غير قابل للتشغيل هنا، والقيم المتوقعة نتائج منطقية وليست مخرجات Spark ملتقطة.
SELECT raw_kwh, try_cast(raw_kwh AS DECIMAL(10,3)) AS parsed_kwh
FROM VALUES ('2.500'),('sensor-offline') AS r(raw_kwh);
raw_kwh | parsed_kwh
2.500 | 2.500
sensor-offline| NULL
القيم المحللة2.500 وNULL؛ ويبقى sensor-offline لتفسير الرفض.
طابق الفئات قبل إعادة حساب المجاميع
يجب أن تكون لكل صف مصدر نتيجة صريحة، مثل accepted أوmissing أوinvalid وفق السياسة المختارة. يوضح المثال الثاني مرحلة تصنيف بعد التحويل المتسامح. احتفظ بهوية الدفعة والقراءة الأصليتين مع النتيجة، ثم قارن عدد المصدر بمجموع المقبول والمرفوض والمستبعد عمداً. يتجاهل SUM قيمة NULL؛ ولهذا قد يخفي إجمالي أقل لكنه يبدو معقولاً مجموعة حساسات فاشلة. حدد هل يجوز نشر الأيام الناقصة وكيف تعدلها القراءات المصححة لاحقاً. إن تعطيل ANSI عالمياً لمجرد إنهاء الوظيفة قد يغير تعبيرات لا صلة لها بالمشكلة، ولا يعد إصلاحاً سياقياً للمصدر.
SELECT raw_kwh, parsed_kwh, CASE
WHEN raw_kwh IS NULL THEN 'missing'
WHEN parsed_kwh IS NULL THEN 'invalid'
ELSE 'accepted' END AS quality
FROM parsed_readings;
يفترض علاقة مجهزة تحفظ الخام. وتبقى حدود المجال مثل عدم سلبية الطاقة فحوصاً مستقلة.
أصلح العقد وأعد اختباره بالإصدار المختار
راجع ملاحظات الترحيل لنسختَي Spark المصدر والوجهة بدقة، وإعدادات ANSI والمنطقة الزمنية المرصودة، وسلوك التحويل في المزود. إذا خالف المصدر عقده، ففضّل تصحيحاً محدوداً للمنتج أوالمخطط. وإذا كان الإدخال المتسامح مقصوداً، فانشر محاسبة الرفض وحدد مالك الإصلاح بدلاً من قبول الفقد بصمت. اختبر الصفر وNULL والنص المعيب والحدود الرقمية وانتقالات الوقت في مختبر مستقل مصرح به. لا ينفذ الدليل محلل Spark أوقارئ ملفات أويغير إعداداً؛ يفحص محلياً الصياغة والتوقعات الاصطناعية الدقيقة فقط.
تحقق من نجاح الإصلاح
طابق أعداد المصدر والنتائج، وقارن هويات قراءات ممثلة، وأعد حساب الطاقة وفق سياسة الاكتمال الصريحة. تحقق من بقاء المدخل المعيب والمدخل الغائب قابلين للتمييز، ومن أن الترقية لا تغير معنى البيانات المقبولة بصمت. لا يدعي هذا الدليل التحريري تنفيذ تحقق على المحرك.
امنع تكرار المشكلة
- احفظ المخططات والوحدات بإصدارات، واحتفظ بأدلة رفض القيم الخام، وضمّن البيانات المعيبة والحدية في فحوص النشر. سجل افتراضات بيئة التشغيل المختارة مع التجاوزات المرصودة، وحدد مسؤولاً موثقاً عن إعادة معالجة المصدر بعد إصلاحه.