تحويل PySpark DataFrame إلى JSON

Thwyl Pyspark Dataframe Aly Json



من الممكن نقل البيانات المنظمة باستخدام JSON ويستهلك أيضًا ذاكرة منخفضة. عند مقارنتها بـ PySpark RDD أو PySpark DataFrame ، تستهلك JSON ذاكرة منخفضة والتسلسل وهو أمر ممكن مع JSON. نحن قادرون على تحويل PySpark DataFrame إلى JSON باستخدام طريقة pyspark.sql.DataFrameWriter.json (). بصرف النظر عن ذلك ، هناك طريقتان أخريان لتحويل DataFrame إلى JSON.

موضوع المحتويات:

دعونا نفكر في PySpark DataFrame بسيط في جميع الأمثلة وتحويله إلى JSON باستخدام الوظائف المذكورة.







الوحدة المطلوبة:

قم بتثبيت مكتبة PySpark في بيئتك إذا لم تكن مثبتة بعد. يمكنك الرجوع إلى الأمر التالي لتثبيته:



نقطة تثبيت pyspark

PySpark DataFrame إلى JSON باستخدام To_json () مع ToPandas ()

طريقة to_json () متاحة في وحدة Pandas التي تحول Pandas DataFrame إلى JSON. يمكننا استخدام هذه الطريقة إذا قمنا بتحويل PySpark DataFrame إلى Pandas DataFrame. من أجل تحويل PySpark DataFrame إلى Pandas DataFrame ، يتم استخدام طريقة toPandas (). دعنا نرى بنية to_json () جنبًا إلى جنب مع معلماتها.



بناء الجملة:





dataframe_object.toPandas (). to_json (orient، index، ...)
  1. يستخدم المشرق لعرض JSON المحول بالتنسيق المطلوب. يأخذ 'السجلات' ، 'الجدول' ، 'القيم' ، 'الأعمدة' ، 'الفهرس' ، 'الانقسام'.
  2. يستخدم الفهرس لتضمين / إزالة الفهرس من سلسلة JSON المحولة. إذا تم ضبطه على 'True' ، يتم عرض المؤشرات. خلاف ذلك ، لن يتم عرض المؤشرات إذا كان الاتجاه 'منقسم' أو 'جدول'.

مثال 1: Orient كـ 'Records'

قم بإنشاء 'Skills_df' PySpark DataFrame مع 3 صفوف و 4 أعمدة. قم بتحويل DataFrame هذا إلى JSON عن طريق تحديد معامل التوجيه على أنه 'سجلات'.

استيراد pyspark

استيراد الباندا

من pyspark.sql import SparkSession

linuxhint_spark_app = SparkSession.builder.appName ( 'تلميح Linux' ) .getOrCreate ()

# بيانات المهارات مع 3 صفوف و 4 أعمدة

المهارات = [{ 'بطاقة تعريف' : 123 و 'شخص' : 'عسل' و 'مهارة' : 'تلوين' و 'جائزة' : 25000 } ،

{ 'بطاقة تعريف' : 112 و 'شخص' : 'موني' و 'مهارة' : 'الرقص' و 'جائزة' : 2000 } ،

{ 'بطاقة تعريف' : 153 و 'شخص' : 'تولاسي' و 'مهارة' : 'قراءة' و 'جائزة' : 1200 }

]

# إنشاء إطار بيانات المهارات من البيانات أعلاه

Skills_df = linuxhint_spark_app.createDataFrame (المهارات)

# بيانات المهارات الفعلية

Skills_df.show ()

# تحويل إلى JSON باستخدام to_json () مع توجيه كـ 'سجلات'

json_skills_data = Skills_df.toPandas (). to_json (orient = 'سجلات' )

طباعة (json_skills_data)

انتاج:



+ --- + ------ + ----- + -------- +

| المعرف | الشخص | الجائزة | مهارة |

+ --- + ------ + ----- + -------- +

| 123 | العسل | 25000 | الرسم |

| 112 | موني | 2000 | الرقص |

| 153 | تولاسي | 1200 | القراءة |

+ --- + ------ + ----- + -------- +

[{ 'بطاقة تعريف' : 123 و 'شخص' : 'عسل' و 'جائزة' : 25000 و 'مهارة' : 'تلوين' } ، { 'بطاقة تعريف' : 112 و 'شخص' : 'موني' و 'جائزة' : 2000 و 'مهارة' : 'الرقص' } ، { 'بطاقة تعريف' : 153 و 'شخص' : 'تولاسي' و 'جائزة' : 1200 و 'مهارة' : 'قراءة' }]

يمكننا أن نرى أن PySpark DataFrame يتم تحويله إلى مصفوفة JSON بقاموس من القيم. هنا ، تمثل المفاتيح اسم العمود وتمثل القيمة قيمة الصف / الخلية في PySpark DataFrame.

مثال 2: المشرق باسم 'انقسام'

يتضمن تنسيق JSON الذي يتم إرجاعه بواسطة الاتجاه 'المنقسم' أسماء الأعمدة التي تحتوي على قائمة الأعمدة وقائمة الفهرس وقائمة البيانات. التالي هو تنسيق المشرق 'المنقسم'.

# تحويل إلى JSON باستخدام to_json () مع توجيه كـ 'مقسم'

json_skills_data = Skills_df.toPandas (). to_json (orient = 'ينقسم' )

طباعة (json_skills_data)

انتاج:

{ 'أعمدة' : [ 'بطاقة تعريف' و 'شخص' و 'جائزة' و 'مهارة' ] ، 'فِهرِس' : [ 0 و 1 و 2 ] ، 'بيانات' : [[ 123 و 'عسل' و 25000 و 'تلوين' ] ، [ 112 و 'موني' و 2000 و 'الرقص' ] ، [ 153 و 'تولاسي' و 1200 و 'قراءة' ]]}

مثال 3: المشرق كـ 'فهرس'

هنا ، يتم إيقاف كل صف من PySpark DataFrame في شكل قاموس مع مفتاح كاسم العمود. لكل قاموس ، يتم تحديد موضع الفهرس كمفتاح.

# تحويل إلى JSON باستخدام to_json () مع توجيه كـ 'index'

json_skills_data = Skills_df.toPandas (). to_json (orient = 'فِهرِس' )

طباعة (json_skills_data)

انتاج:

{ '0' : { 'بطاقة تعريف' : 123 و 'شخص' : 'عسل' و 'جائزة' : 25000 و 'مهارة' : 'تلوين' } ، '1' : { 'بطاقة تعريف' : 112 و 'شخص' : 'موني' و 'جائزة' : 2000 و 'مهارة' : 'الرقص' } ، '2' : { 'بطاقة تعريف' : 153 و 'شخص' : 'تولاسي' و 'جائزة' : 1200 و 'مهارة' : 'قراءة' }}

مثال 4: توجيه كـ 'أعمدة'

الأعمدة هي مفتاح كل سجل. يحتوي كل عمود على قاموس يأخذ قيم الأعمدة بأرقام الفهرس.

# التحويل إلى JSON باستخدام to_json () مع التوجيه كـ 'أعمدة'

json_skills_data = Skills_df.toPandas (). to_json (orient = 'أعمدة' )

طباعة (json_skills_data)

انتاج:

{ 'بطاقة تعريف' : { '0' : 123 و '1' : 112 و '2' : 153 } ، 'شخص' : { '0' : 'عسل' و '1' : 'موني' و '2' : 'تولاسي' } ، 'جائزة' : { '0' : 25000 و '1' : 2000 و '2' : 1200 } ، 'مهارة' : { '0' : 'تلوين' و '1' : 'الرقص' و '2' : 'قراءة' }}

مثال 5: المشرق على أنه 'قيم'

إذا كنت بحاجة إلى القيم في JSON فقط ، فيمكنك الانتقال إلى اتجاه 'القيم'. يعرض كل صف في قائمة. أخيرًا ، يتم تخزين جميع القوائم في قائمة. هذا JSON من نوع القائمة المتداخلة.

# التحويل إلى JSON باستخدام to_json () مع توجيه كـ 'قيم'

json_skills_data = Skills_df.toPandas (). to_json (orient = 'قيم' )

طباعة (json_skills_data)

انتاج:

[[ 123 و 'عسل' و 25000 و 'تلوين' ] ، [ 112 و 'موني' و 2000 و 'الرقص' ] ، [ 153 و 'تولاسي' و 1200 و 'قراءة' ]]

مثال 6: توجيه كـ 'جدول'

يقوم اتجاه 'الجدول' بإرجاع JSON الذي يتضمن المخطط بأسماء الحقول جنبًا إلى جنب مع أنواع بيانات العمود والفهرس كمفتاح أساسي وإصدار Pandas. يتم عرض أسماء الأعمدة مع القيم على أنها 'بيانات'.

# تحويل إلى JSON باستخدام to_json () مع توجيه كـ 'جدول'

json_skills_data = Skills_df.toPandas (). to_json (orient = 'طاولة' )

طباعة (json_skills_data)

انتاج:

{ 'مخطط' : { 'مجالات' : [{ 'اسم' : 'فِهرِس' و 'يكتب' : 'عدد صحيح' } ، { 'اسم' : 'بطاقة تعريف' و 'يكتب' : 'عدد صحيح' } ، { 'اسم' : 'شخص' و 'يكتب' : 'خيط' } ، { 'اسم' : 'جائزة' و 'يكتب' : 'عدد صحيح' } ، { 'اسم' : 'مهارة' و 'يكتب' : 'خيط' }] ، 'المفتاح الأساسي' : [ 'فِهرِس' ] ، 'pandas_version' : '1.4.0' } ، 'بيانات' : [{ 'فِهرِس' : 0 و 'بطاقة تعريف' : 123 و 'شخص' : 'عسل' و 'جائزة' : 25000 و 'مهارة' : 'تلوين' } ، { 'فِهرِس' : 1 و 'بطاقة تعريف' : 112 و 'شخص' : 'موني' و 'جائزة' : 2000 و 'مهارة' : 'الرقص' } ، { 'فِهرِس' : 2 و 'بطاقة تعريف' : 153 و 'شخص' : 'تولاسي' و 'جائزة' : 1200 و 'مهارة' : 'قراءة' }]}

مثال 7: مع معلمة الفهرس

أولاً ، نقوم بتمرير معامل الفهرس عن طريق تعيينه على 'True'. سترى لكل قيمة عمود أن موضع الفهرس يتم إرجاعه كمفتاح في القاموس.

في الإخراج الثاني ، يتم إرجاع أسماء الأعمدة ('الأعمدة') والسجلات ('البيانات') فقط بدون مواضع الفهرس حيث تم تعيين الفهرس على 'False'.

# التحويل إلى JSON باستخدام to_json () مع الفهرس = صحيح

json_skills_data = Skills_df.toPandas (). to_json (index = True)

طباعة (json_skills_data ، ' ' )

# التحويل إلى JSON باستخدام to_json () مع الفهرس = خطأ

json_skills_data = Skills_df.toPandas (). to_json (index = False، orient = 'ينقسم' )

طباعة (json_skills_data)

انتاج:

{ 'بطاقة تعريف' : { '0' : 123 و '1' : 112 و '2' : 153 } ، 'شخص' : { '0' : 'عسل' و '1' : 'موني' و '2' : 'تولاسي' } ، 'جائزة' : { '0' : 25000 و '1' : 2000 و '2' : 1200 } ، 'مهارة' : { '0' : 'تلوين' و '1' : 'الرقص' و '2' : 'قراءة' }}

{ 'أعمدة' : [ 'بطاقة تعريف' و 'شخص' و 'جائزة' و 'مهارة' ] ، 'بيانات' : [[ 123 و 'عسل' و 25000 و 'تلوين' ] ، [ 112 و 'موني' و 2000 و 'الرقص' ] ، [ 153 و 'تولاسي' و 1200 و 'قراءة' ]]

PySpark DataFrame إلى JSON باستخدام ToJSON ()

تُستخدم طريقة toJSON () لتحويل PySpark DataFrame إلى كائن JSON. في الأساس ، تقوم بإرجاع سلسلة JSON محاطة بقائمة. ال ['{العمود: القيمة ، ...}' ،…. ] هو التنسيق الذي يتم إرجاعه بواسطة هذه الوظيفة. هنا ، يتم إرجاع كل صف من PySpark DataFrame كقاموس مع اسم العمود كمفتاح.

بناء الجملة:

dataframe_object.toJSON ()

يمكن تمرير المعلمات مثل الفهرس وتسميات الأعمدة ونوع البيانات.

مثال:

قم بإنشاء 'Skills_df' PySpark DataFrame مع 5 صفوف و 4 أعمدة. قم بتحويل DataFrame هذا إلى JSON باستخدام طريقة toJSON ().

استيراد pyspark

من pyspark.sql import SparkSession

linuxhint_spark_app = SparkSession.builder.appName ( 'تلميح Linux' ) .getOrCreate ()

# بيانات المهارات مع 5 صفوف و 4 أعمدة

المهارات = [{ 'بطاقة تعريف' : 123 و 'شخص' : 'عسل' و 'مهارة' : 'تلوين' و 'جائزة' : 25000 } ،

{ 'بطاقة تعريف' : 112 و 'شخص' : 'موني' و 'مهارة' : 'موسيقى / رقص' و 'جائزة' : 2000 } ،

{ 'بطاقة تعريف' : 153 و 'شخص' : 'تولاسي' و 'مهارة' : 'قراءة' و 'جائزة' : 1200 } ،

{ 'بطاقة تعريف' : 173 و 'شخص' : 'جرى' و 'مهارة' : 'موسيقى' و 'جائزة' : 2000 } ،

{ 'بطاقة تعريف' : 43 و 'شخص' : 'كمالا' و 'مهارة' : 'قراءة' و 'جائزة' : 10000 }

]

# إنشاء إطار بيانات المهارات من البيانات أعلاه

Skills_df = linuxhint_spark_app.createDataFrame (المهارات)

# بيانات المهارات الفعلية

Skills_df.show ()

# تحويل إلى مجموعة JSON

json_skills_data = Skills_df.toJSON (). collect ()

طباعة (json_skills_data)

انتاج:

+ --- + ------ + ----- + ----------- +

| المعرف | الشخص | الجائزة | مهارة |

+ --- + ------ + ----- + ----------- +

| 123 | العسل | 25000 | اللوحة |

| 112 | موني | 2000 | موسيقى / رقص |

| 153 | تولاسي | 1200 | القراءة |

| 173 | ران | 2000 | موسيقى |

| 43 | كمالا | 10000 | القراءة |

+ --- + ------ + ----- + ----------- +

[ '{'id': 123، 'person': 'Honey'، 'prize': 25000، 'skills': 'painting'}' و '{'id': 112، 'person': 'Mouni'، 'prize': 2000، 'skills': 'music / dance'}' و '{'id': 153، 'person': 'Tulasi'، 'prize': 1200، 'skills': 'reading'}' و '{'id': 173، 'person': 'Ran'، 'prize': 2000، 'Skills': 'music'}' و '{'id': 43، 'person': 'Kamala'، 'prize': 10000، 'skills': 'reading'}' ]

هناك 5 صفوف في PySpark DataFrame. يتم إرجاع كل هذه الصفوف الخمسة كقاموس للسلاسل المفصولة بفاصلة.

PySpark DataFrame إلى JSON باستخدام Write.json ()

طريقة write.json () متاحة في PySpark والتي تكتب / تحفظ PySpark DataFrame في ملف JSON. يأخذ اسم الملف / المسار كمعامل. بشكل أساسي ، تقوم بإرجاع JSON في ملفات متعددة (ملفات مقسمة). لدمجهم جميعًا في ملف واحد ، يمكننا استخدام طريقة coalesce ().

بناء الجملة:

dataframe_object.coalesce ( 1 ) .write.json ('file_name')
  1. وضع الإلحاق - dataframe_object.write.mode ('append'). json ('file_name')
  2. وضع الكتابة - dataframe_object.write.mode ('overwrite'). json ('file_name')

يمكن إلحاق / الكتابة فوق JSON الموجود. باستخدام write.mode () ، يمكننا إلحاق البيانات بتمرير 'append' أو الكتابة فوق بيانات JSON الموجودة عن طريق تمرير 'overwrite' إلى هذه الوظيفة.

مثال 1:

قم بإنشاء 'Skills_df' PySpark DataFrame مع 3 صفوف و 4 أعمدة. اكتب DataFrame هذا إلى JSON.

استيراد pyspark

استيراد الباندا

من pyspark.sql import SparkSession

linuxhint_spark_app = SparkSession.builder.appName ( 'تلميح Linux' ) .getOrCreate ()

# بيانات المهارات مع 3 صفوف و 4 أعمدة

المهارات = [{ 'بطاقة تعريف' : 123 و 'شخص' : 'عسل' و 'مهارة' : 'تلوين' و 'جائزة' : 25000 } ،

{ 'بطاقة تعريف' : 112 و 'شخص' : 'موني' و 'مهارة' : 'الرقص' و 'جائزة' : 2000 } ،

{ 'بطاقة تعريف' : 153 و 'شخص' : 'تولاسي' و 'مهارة' : 'قراءة' و 'جائزة' : 1200 }

]

# إنشاء إطار بيانات المهارات من البيانات أعلاه

Skills_df = linuxhint_spark_app.createDataFrame (المهارات)

# write.json ()

Skills_df.coalesce ( 1 ) .write.json ( 'المهارات_البيانات' )

ملف JSON:

يمكننا أن نرى أن مجلد Skills_data يتضمن بيانات JSON المقسمة.

لنفتح ملف JSON. يمكننا أن نرى أنه يتم تحويل جميع الصفوف من PySpark DataFrame إلى JSON.

هناك 5 صفوف في PySpark DataFrame. يتم إرجاع كل هذه الصفوف الخمسة كقاموس للسلاسل المفصولة بفاصلة.

المثال الثاني:

قم بإنشاء 'Skills2_df' PySpark DataFrame بصف واحد. قم بإلحاق صف واحد بملف JSON السابق بتحديد الوضع على أنه 'إلحاق'.

استيراد pyspark

استيراد الباندا

من pyspark.sql import SparkSession

linuxhint_spark_app = SparkSession.builder.appName ( 'تلميح Linux' ) .getOrCreate ()

المهارات 2 = [{ 'بطاقة تعريف' : 78 و 'شخص' : 'ماري' و 'مهارة' : 'يركب' و 'جائزة' : 8960 }

]

# إنشاء إطار بيانات المهارات من البيانات أعلاه

Skills2_df = linuxhint_spark_app.createDataFrame (المهارات 2)

# write.json () مع وضع الإلحاق.

المهارات2_df.write.mode ( 'ألحق' ) .json ( 'المهارات_البيانات' )

ملف JSON:

يمكننا رؤية ملفات JSON المقسمة. يحتوي الملف الأول على سجلات DataFrame الأولى ، ويحتوي الملف الثاني على سجل DataFrame الثاني.

خاتمة

هناك ثلاث طرق مختلفة لتحويل PySpark DataFrame إلى JSON. أولاً ، ناقشنا طريقة to_json () التي تتحول إلى JSON عن طريق تحويل PySpark DataFrame إلى Pandas DataFrame بأمثلة مختلفة من خلال النظر في معلمات مختلفة. بعد ذلك ، استخدمنا طريقة toJSON (). أخيرًا ، تعلمنا كيفية استخدام وظيفة write.json () لكتابة PySpark DataFrame إلى JSON. يمكن إلحاق هذه الوظيفة والكتابة فوقها.