معالجة السجلات والملفات غير صالحة

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

يوفر Azure Databricks واجهة موحدة لمعالجة السجلات والملفات غير صالحة دون مقاطعة وظائف Spark. يمكنك الحصول على سجلات الاستثناء /الملفات والأسباب من سجلات الاستثناء عن طريق تعيين خيار مصدر البيانات badRecordsPath . badRecordsPath تحديد مسار لتخزين ملفات الاستثناء لتسجيل المعلومات حول السجلات السيئة لمصادر CSV و JSON والملفات غير الصحيحة لكافة المصادر المضمنة المستندة إلى الملفات (على سبيل المثال، باركيه).

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

ملاحظة

استخدام badRecordsPath الخيار في مصدر بيانات مستند إلى ملف له بعض القيود الهامة:

  • وهو غير معاملات ويمكن أن يؤدي إلى نتائج غير متسقة.
  • يتم التعامل مع الأخطاء العابرة كفشل.

أمثلة

غير قادر على العثور على ملف الإدخال

val df = spark.read
  .option("badRecordsPath", "/tmp/badRecordsPath")
  .parquet("/input/parquetFile")

// Delete the input parquet file '/input/parquetFile'
dbutils.fs.rm("/input/parquetFile")

df.show()

في المثال أعلاه، منذ df.show() غير قادر على العثور على ملف الإدخال، Spark بإنشاء ملف استثناء بتنسيق JSON لتسجيل الخطأ. على سبيل المثال، /tmp/badRecordsPath/20170724T101153/bad_files/xyz هو مسار ملف الاستثناء. هذا الملف تحت badRecordsPath الدليل المحدد، /tmp/badRecordsPath . 20170724T101153 هو وقت إنشاء هذا DataFrameReader . bad_files هو نوع الاستثناء. xyz هو ملف يحتوي على سجل JSON الذي يحتوي على مسار الملف غير صالح و رسالة الاستثناء/السبب.

ملف الإدخال يحتوي على سجل غير صالح

// Creates a json file containing both parsable and corrupted records
Seq("""{"a": 1, "b": 2}""", """{bad-record""").toDF().write.text("/tmp/input/jsonFile")

val df = spark.read
  .option("badRecordsPath", "/tmp/badRecordsPath")
  .schema("a int, b int")
  .json("/tmp/input/jsonFile")

df.show()

في هذا المثال، يحتوي DataFrame على السجل القابل للتحلل الأول فقط ( {"a": 1, "b": 2} ). يتم تسجيل السجل الثاني غير صحيح ( {bad-record ) في ملف الاستثناء، وهو ملف JSON الموجود في /tmp/badRecordsPath/20170724T114715/bad_records/xyz . يحتوي ملف الاستثناء على سجل غير صالح مسار الملف الذي يحتوي على السجل و رسالة الاستثناء/السبب. بعد تحديد موقع ملفات الاستثناء، يمكنك استخدام قارئ JSON لمعالجتها.