القراءة والكتابة إلى ملفات CSV

توفر هذه المقالة أمثلة للقراءة والكتابة إلى ملفات CSV باستخدام Azure Databricks باستخدام Python وSc scala وR وSQL.

إشعار

توصي Databricks read_files دالة قيم الجدول لمستخدمي SQL لقراءة ملفات CSV. read_files متوفر في Databricks Runtime 13.3 LTS وما فوق.

يمكنك أيضا استخدام طريقة عرض مؤقتة. إذا كنت تستخدم SQL لقراءة بيانات CSV مباشرة دون استخدام طرق عرض مؤقتة أو read_files، يتم تطبيق القيود التالية:

الخيارات

يمكنك تكوين عدة خيارات لمصادر بيانات ملف CSV. راجع مقالات مرجع Apache Spark التالية للحصول على خيارات القراءة والكتابة المدعومة.

العمل مع سجلات CSV غير المصنفة

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

  • PERMISSIVE (افتراضي): يتم إدراج القيم الخالية للحولات التي تعذر تحليلها بشكل صحيح
  • DROPMALFORMED: يسقط خطوطا تحتوي على حقول لا يمكن تحليلها
  • FAILFAST: إحباط القراءة إذا تم العثور على أي بيانات مشوهة

لتعيين الوضع، استخدم mode الخيار .

diamonds_df = (spark.read
  .format("csv")
  .option("mode", "PERMISSIVE")
  .load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)

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

  • يمكنك توفير مسار مخصص لخيار badRecordsPath تسجيل سجلات تالفة إلى ملف.
  • يمكنك إضافة العمود _corrupt_record إلى المخطط المقدم إلى DataFrameReader لمراجعة السجلات التالفة في DataFrame الناتج.

إشعار

يكون للخيار badRecordsPath الأسبقية على _corrupt_record، مما يعني أن الصفوف التي تم تكوينها بشكل غير صحيح والمكتوبة إلى المسار المتوفر لا تظهر في DataFrame الناتج.

يتغير السلوك الافتراضي للسجلات التي تم تكوينها بشكل غير جيد عند استخدام عمود البيانات الذي تم إنقاذه.

البحث عن دفتر ملاحظات الصفوف التي تم تكوينها بشكل غير صحيح

الحصول على دفتر الملاحظات

عمود البيانات المنقذة

إشعار

هذه الميزة مدعومة في Databricks Runtime 8.3 (غير مدعوم) وما فوق.

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

  • غير موجود في المخطط المقدم.
  • لا يتطابق مع نوع بيانات المخطط المقدم.
  • يحتوي على عدم تطابق حالة مع أسماء الحقول في المخطط المتوفر.

يتم إرجاع عمود البيانات الذي تم إنقاذه كمستند JSON يحتوي على الأعمدة التي تم إنقاذها، ومسار الملف المصدر للسجل. لإزالة مسار الملف المصدر من عمود البيانات المنقذة، يمكنك تعيين تكوين spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")SQL . يمكنك تمكين عمود البيانات الذي تم إنقاذه عن طريق تعيين الخيار rescuedDataColumn إلى اسم عمود عند قراءة البيانات، مثل _rescued_data مع spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>).

يدعم محلل CSV ثلاثة أوضاع عند تحليل السجلات: PERMISSIVEو DROPMALFORMEDو.FAILFAST عند استخدامها مع rescuedDataColumn، لا تتسبب عدم تطابقات نوع البيانات في إسقاط السجلات في DROPMALFORMED الوضع أو طرح خطأ في FAILFAST الوضع. يتم إسقاط السجلات التالفة فقط - أي CSV غير المكتملة أو غير المملة - أو طرح الأخطاء.

عند rescuedDataColumn استخدام في PERMISSIVE الوضع، تنطبق القواعد التالية على السجلات التالفة:

  • يعين الصف الأول من الملف (إما صف رأس أو صف بيانات) طول الصف المتوقع.
  • يعتبر الصف الذي يحتوي على عدد مختلف من الأعمدة غير مكتمل.
  • لا تعتبر عدم تطابق نوع البيانات سجلات تالفة.
  • تعتبر سجلات CSV غير المكتملة والمتالفة فقط تالفة ويتم تسجيلها في _corrupt_record العمود أو badRecordsPath.

مثال SQL: قراءة ملف CSV

يقرأ مثال SQL التالي ملف CSV باستخدام read_files.

-- mode "FAILFAST" aborts file parsing with a RuntimeException if malformed lines are encountered
SELECT * FROM read_files(
  's3://<bucket>/<path>/<file>.csv',
  format => 'csv',
  header => true,
  mode => 'FAILFAST')

أمثلة Scala وR وPython: قراءة ملف CSV

يوضح دفتر الملاحظات التالي كيفية قراءة ملف وعرض بيانات نموذجية وطباعة مخطط البيانات باستخدام Scala وR وPython. تستخدم الأمثلة في هذا القسم مجموعة بيانات الماس. حدد المسار إلى مجموعة البيانات بالإضافة إلى أي خيارات تريدها.

قراءة دفتر ملاحظات ملفات CSV

الحصول على دفتر الملاحظات

مثال: تحديد المخطط

عندما يكون مخطط ملف CSV معروفا، يمكنك تحديد المخطط المطلوب لقارئ CSV مع schema الخيار .

قراءة ملفات CSV باستخدام دفتر ملاحظات المخطط

الحصول على دفتر الملاحظات

مثال SQL باستخدام read_files:

SELECT * FROM read_files(
  's3://<bucket>/<path>/<file>.csv',
  format => 'csv',
  header => false,
  schema => 'id string, date date, event_time timestamp')

مثال: أخطاء قراءة مجموعة فرعية من الأعمدة

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

تحذيرات قراءة مجموعة فرعية من أعمدة دفتر ملاحظات ملف CSV

الحصول على دفتر الملاحظات