قراءة ملفات 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 فقط، ولكن يمكنك التعرف على خيارات الكتابة المدعومة في مقالات مرجع 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 (EoS) وما فوق.
عند استخدام 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 على مجموعة الأعمدة التي تتم قراءتها. إذا كان المخطط المحدد غير صحيح، فقد تختلف النتائج اختلافا كبيرا اعتمادا على المجموعة الفرعية للأعمدة التي يتم الوصول إليها. يقدم دفتر الملاحظات التالي المزالق الأكثر شيوعا.