PySpark ڈیٹا فریم کو JSON میں تبدیل کرنا

Pyspark Y A Frym Kw Json My Tbdyl Krna



JSON کا استعمال کرتے ہوئے ایک سٹرکچرڈ ڈیٹا کی منتقلی ممکن ہے اور کم میموری بھی استعمال کرتی ہے۔ PySpark RDD یا PySpark DataFrame کے مقابلے میں، JSON کم میموری اور سیریلائزیشن استعمال کرتا ہے جو JSON کے ساتھ ممکن ہے۔ ہم pyspark.sql.DataFrameWriter.json() طریقہ استعمال کرتے ہوئے PySpark DataFrame کو JSON میں تبدیل کرنے کے قابل ہیں۔ اس کے علاوہ، ڈیٹا فریم کو JSON میں تبدیل کرنے کے دو اور طریقے ہیں۔

مواد کا موضوع:

آئیے تمام مثالوں میں ایک سادہ پی اسپارک ڈیٹا فریم پر غور کریں اور ذکر کردہ فنکشنز کا استعمال کرتے ہوئے اسے JSON میں تبدیل کریں۔







مطلوبہ ماڈیول:

PySpark لائبریری کو اپنے ماحول میں انسٹال کریں اگر یہ ابھی تک انسٹال نہیں ہے۔ آپ اسے انسٹال کرنے کے لیے درج ذیل کمانڈ کا حوالہ دے سکتے ہیں۔



pip انسٹال pyspark

ToPandas() کے ساتھ To_json() کا استعمال کرتے ہوئے JSON کو PySpark ڈیٹا فریم

to_json() طریقہ پانڈاس ماڈیول میں دستیاب ہے جو پانڈاس ڈیٹا فریم کو JSON میں تبدیل کرتا ہے۔ اگر ہم اپنے PySpark DataFrame کو Pandas DataFrame میں تبدیل کرتے ہیں تو ہم اس طریقے کو استعمال کر سکتے ہیں۔ PySpark DataFrame کو Pandas DataFrame میں تبدیل کرنے کے لیے toPandas() طریقہ استعمال کیا جاتا ہے۔ آئیے to_json() کا نحو اس کے پیرامیٹرز کے ساتھ دیکھتے ہیں۔



نحو:





dataframe_object.toPandas().to_json(orient,index,...)
  1. تبدیل شدہ JSON کو مطلوبہ فارمیٹ کے طور پر ظاہر کرنے کے لیے Orient کا استعمال کیا جاتا ہے۔ یہ 'ریکارڈز'، 'ٹیبل'، 'ویلیوز'، 'کالم'، 'انڈیکس'، 'اسپلٹ' لیتا ہے۔
  2. انڈیکس کو تبدیل شدہ JSON سٹرنگ سے انڈیکس کو شامل کرنے/ ہٹانے کے لیے استعمال کیا جاتا ہے۔ اگر اسے 'True' پر سیٹ کیا جاتا ہے، تو اشاریے ظاہر ہوتے ہیں۔ بصورت دیگر، اشاریے ظاہر نہیں ہوں گے اگر اورینٹ 'تقسیم' یا 'ٹیبل' ہے۔

مثال 1: اورینٹ بطور 'ریکارڈز'

3 قطاروں اور 4 کالموں کے ساتھ ایک 'Skills_df' PySpark ڈیٹا فریم بنائیں۔ اورینٹ پیرامیٹر کو بطور 'ریکارڈز' بتا کر اس ڈیٹا فریم کو JSON میں تبدیل کریں۔

pyspark درآمد کریں۔

پانڈا درآمد کریں۔

pyspark.sql سے SparkSession درآمد کریں۔

linuxhint_spark_app = SparkSession.builder.appName( 'لینکس اشارہ' .getOrCreate()

3 قطاروں اور 4 کالموں کے ساتھ # مہارت کا ڈیٹا

ہنر =[{ 'id' : 123 ، 'شخص' : 'شہد' ، 'مہارت' : 'پینٹنگ' ، 'انعام' : 25000

{ 'id' : 112 ، 'شخص' : 'مونی' ، 'مہارت' : 'رقص' ، 'انعام' : 2000

{ 'id' : 153 ، 'شخص' : 'تلسی' ، 'مہارت' : 'پڑھنا' ، 'انعام' : 1200 }

]

# مندرجہ بالا ڈیٹا سے مہارت کا ڈیٹا فریم بنائیں

skills_df = linuxhint_spark_app.createDataFrame(مہارت)

# اصل مہارت کا ڈیٹا

skills_df.show()

# 'ریکارڈ' کے بطور اورینٹ کے ساتھ to_json() کا استعمال کرتے ہوئے JSON میں تبدیل کریں

json_skills_data = skills_df.toPandas().to_json(orient= 'ریکارڈز' )

پرنٹ(json_skills_data)

آؤٹ پٹ:



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

| id|شخص|انعام| مہارت |

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

| 123 | شہد | 25000 |پینٹنگ|

| 112 | مونی | 2000 | رقص |

| 153 |تلسی | 1200 | پڑھنا |

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

[{ 'id' : 123 ، 'شخص' : 'شہد' ، 'انعام' : 25000 ، 'مہارت' : 'پینٹنگ' }،{ 'id' : 112 ، 'شخص' : 'مونی' ، 'انعام' : 2000 ، 'مہارت' : 'رقص' }،{ 'id' : 153 ، 'شخص' : 'تلسی' ، 'انعام' : 1200 ، 'مہارت' : 'پڑھنا' }]

ہم دیکھ سکتے ہیں کہ PySpark DataFrame کو قدروں کی لغت کے ساتھ JSON صف میں تبدیل کیا گیا ہے۔ یہاں، کلیدیں کالم کے نام کی نمائندگی کرتی ہیں اور قیمت PySpark ڈیٹا فریم میں قطار/سیل کی قدر کی نمائندگی کرتی ہے۔

مثال 2: 'اسپلٹ' کے بطور اورینٹ

JSON فارمیٹ جو 'اسپلٹ' اورینٹ کے ذریعہ واپس کیا جاتا ہے اس میں کالم کے نام شامل ہوتے ہیں جن میں کالموں کی فہرست، انڈیکس کی فہرست اور ڈیٹا کی فہرست ہوتی ہے۔ ذیل میں 'اسپلٹ' اورینٹ کی شکل ہے۔

# اسپلٹ کے بطور اورینٹ کے ساتھ to_json() کا استعمال کرتے ہوئے JSON میں تبدیل کریں

json_skills_data = skills_df.toPandas().to_json(orient= 'تقسیم' )

پرنٹ(json_skills_data)

آؤٹ پٹ:

{ 'کالم' :[ 'id' ، 'شخص' ، 'انعام' ، 'مہارت' 'انڈیکس' :[ 0 ، 1 ، 2 'ڈیٹا' :[[ 123 ، 'شہد' ، 25000 ، 'پینٹنگ' ]،[ 112 ، 'مونی' ، 2000 ، 'رقص' ]،[ 153 ، 'تلسی' ، 1200 ، 'پڑھنا' ]]}

مثال 3: اورینٹ بطور 'انڈیکس'

یہاں، PySpark DataFrame سے ہر قطار کو کالم کے نام کی کلید کے ساتھ لغت کی شکل میں ریٹائر کیا جاتا ہے۔ ہر لغت کے لیے، انڈیکس پوزیشن کلید کے طور پر بیان کی جاتی ہے۔

# انڈیکس کے بطور اورینٹ کے ساتھ to_json() کا استعمال کرتے ہوئے JSON میں تبدیل کریں

json_skills_data = skills_df.toPandas().to_json(orient= 'انڈیکس' )

پرنٹ(json_skills_data)

آؤٹ پٹ:

{ '0' :{ 'id' : 123 ، 'شخص' : 'شہد' ، 'انعام' : 25000 ، 'مہارت' : 'پینٹنگ' '1' :{ 'id' : 112 ، 'شخص' : 'مونی' ، 'انعام' : 2000 ، 'مہارت' : 'رقص' '2' :{ 'id' : 153 ، 'شخص' : 'تلسی' ، 'انعام' : 1200 ، 'مہارت' : 'پڑھنا' }}

مثال 4: اورینٹ بطور 'کالم'

کالم ہر ریکارڈ کے لیے کلید ہیں۔ ہر کالم میں ایک لغت ہوتی ہے جو کالم کی اقدار کو اشاریہ نمبروں کے ساتھ لیتی ہے۔

# 'کالم' کے بطور اورینٹ کے ساتھ to_json() کا استعمال کرتے ہوئے JSON میں تبدیل کریں

json_skills_data = skills_df.toPandas().to_json(orient= 'کالم' )

پرنٹ(json_skills_data)

آؤٹ پٹ:

{ 'id' :{ '0' : 123 ، '1' : 112 ، '2' : 153 'شخص' :{ '0' : 'شہد' ، '1' : 'مونی' ، '2' : 'تلسی' 'انعام' :{ '0' : 25000 ، '1' : 2000 ، '2' : 1200 'مہارت' :{ '0' : 'پینٹنگ' ، '1' : 'رقص' ، '2' : 'پڑھنا' }}

مثال 5: 'اقدار' کے بطور اورینٹ

اگر آپ کو JSON میں صرف اقدار کی ضرورت ہے، تو آپ 'اقدار' اورینٹ کے لیے جا سکتے ہیں۔ یہ ہر قطار کو فہرست میں دکھاتا ہے۔ آخر میں، تمام فہرستیں ایک فہرست میں محفوظ ہیں. یہ JSON نیسٹڈ لسٹ کی قسم کا ہے۔

# اورینٹ کے ساتھ to_json() کا استعمال کرتے ہوئے JSON میں تبدیل کریں بطور 'values'

json_skills_data = skills_df.toPandas().to_json(orient= 'اقدار' )

پرنٹ(json_skills_data)

آؤٹ پٹ:

[[ 123 , 'شہد' , 25000 , 'پینٹنگ' ]،[ 112 , 'مونی' , 2000 , 'رقص' ]،[ 153 , 'تلسی' , 1200 , 'پڑھنا' ]]

مثال 6: اورینٹ بطور 'ٹیبل'

'ٹیبل' اورینٹ JSON کو لوٹاتا ہے جس میں کالم ڈیٹا کی اقسام کے ساتھ فیلڈ کے ناموں کے ساتھ اسکیما، بنیادی کلید کے طور پر انڈیکس اور پانڈاس ورژن شامل ہوتا ہے۔ اقدار کے ساتھ کالم کے نام 'ڈیٹا' کے طور پر دکھائے جاتے ہیں۔

# 'ٹیبل' کے بطور اورینٹ کے ساتھ to_json() کا استعمال کرتے ہوئے JSON میں تبدیل کریں

json_skills_data = skills_df.toPandas().to_json(orient= 'ٹیبل' )

پرنٹ(json_skills_data)

آؤٹ پٹ:

{ 'اسکیما' :{ 'کھیتوں' :[{ 'نام' : 'انڈیکس' , 'قسم' : 'عدد' }،{ 'نام' : 'id' , 'قسم' : 'عدد' }،{ 'نام' : 'شخص' , 'قسم' : 'سٹرنگ' }،{ 'نام' : 'انعام' , 'قسم' : 'عدد' }،{ 'نام' : 'مہارت' , 'قسم' : 'سٹرنگ' }]، 'بنیادی چابی' :[ 'انڈیکس' 'پانڈا_ورژن' : '1.4.0' 'ڈیٹا' :[{ 'انڈیکس' : 0 , 'id' : 123 , 'شخص' : 'شہد' , 'انعام' : 25000 , 'مہارت' : 'پینٹنگ' }،{ 'انڈیکس' : 1 , 'id' : 112 , 'شخص' : 'مونی' , 'انعام' : 2000 , 'مہارت' : 'رقص' }،{ 'انڈیکس' : 2 , 'id' : 153 , 'شخص' : 'تلسی' , 'انعام' : 1200 , 'مہارت' : 'پڑھنا' }]}

مثال 7: انڈیکس پیرامیٹر کے ساتھ

سب سے پہلے، ہم انڈیکس پیرامیٹر کو 'True' پر سیٹ کر کے پاس کرتے ہیں۔ آپ ہر کالم کی قدر کے لیے دیکھیں گے کہ انڈیکس پوزیشن ایک لغت میں کلید کے طور پر لوٹائی گئی ہے۔

دوسرے آؤٹ پٹ میں، صرف کالم کے نام ('کالم') اور ریکارڈز ('ڈیٹا') انڈیکس پوزیشن کے بغیر واپس کیے جاتے ہیں کیونکہ انڈیکس 'غلط' پر سیٹ ہوتا ہے۔

# index=True کے ساتھ to_json() کا استعمال کرتے ہوئے JSON میں تبدیل کریں۔

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

پرنٹ (json_Skills_data, ' \n ' )

# index=False کے ساتھ to_json() کا استعمال کرتے ہوئے JSON میں تبدیل کریں۔

json_skills_data= skills_df.toPandas().to_json(index=False,orient= 'تقسیم' )

پرنٹ(json_skills_data)

آؤٹ پٹ:

{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 'شخص' :{ '0' : 'شہد' , '1' : 'مونی' , '2' : 'تلسی' 'انعام' :{ '0' : 25000 , '1' : 2000 , '2' : 1200 'مہارت' :{ '0' : 'پینٹنگ' , '1' : 'رقص' , '2' : 'پڑھنا' }}

{ 'کالم' :[ 'id' , 'شخص' , 'انعام' , 'مہارت' 'ڈیٹا' :[[ 123 , 'شہد' , 25000 , 'پینٹنگ' ]،[ 112 , 'مونی' , 2000 , 'رقص' ]،[ 153 , 'تلسی' , 1200 , 'پڑھنا' ]]

ToJSON() کا استعمال کرتے ہوئے JSON کو PySpark ڈیٹا فریم

toJSON() طریقہ PySpark ڈیٹا فریم کو JSON آبجیکٹ میں تبدیل کرنے کے لیے استعمال کیا جاتا ہے۔ بنیادی طور پر، یہ ایک JSON سٹرنگ لوٹاتا ہے جو ایک فہرست سے گھرا ہوا ہے۔ دی [‘{کالم:قدر،…}’،…. ] وہ فارمیٹ ہے جو اس فنکشن کے ذریعے لوٹایا جاتا ہے۔ یہاں، PySpark DataFrame سے ہر قطار کو بطور کلید کالم کے نام کے ساتھ لغت کے طور پر واپس کیا جاتا ہے۔

نحو:

dataframe_object.toJSON()

انڈیکس، کالم لیبلز، اور ڈیٹا کی قسم جیسے پیرامیٹرز کو پاس کرنا ممکن ہو سکتا ہے۔

مثال:

5 قطاروں اور 4 کالموں کے ساتھ ایک 'Skills_df' PySpark ڈیٹا فریم بنائیں۔ toJSON() طریقہ استعمال کرکے اس ڈیٹا فریم کو JSON میں تبدیل کریں۔

pyspark درآمد کریں۔

pyspark.sql سے SparkSession درآمد کریں۔

linuxhint_spark_app = SparkSession.builder.appName( 'لینکس اشارہ' .getOrCreate()

# مہارت کا ڈیٹا 5 قطاروں اور 4 کالموں کے ساتھ

ہنر =[{ 'id' : 123 , 'شخص' : 'شہد' , 'مہارت' : 'پینٹنگ' , 'انعام' : 25000

{ 'id' : 112 , 'شخص' : 'مونی' , 'مہارت' : 'موسیقی/رقص' , 'انعام' : 2000

{ 'id' : 153 , 'شخص' : 'تلسی' , 'مہارت' : 'پڑھنا' , 'انعام' : 1200

{ 'id' : 173 , 'شخص' : 'دوڑ' , 'مہارت' : 'موسیقی' , 'انعام' : 2000

{ 'id' : 43 , 'شخص' : 'کملا' , 'مہارت' : 'پڑھنا' , 'انعام' : 10000 }

]

# مندرجہ بالا ڈیٹا سے مہارت کا ڈیٹا فریم بنائیں

skills_df = linuxhint_spark_app.createDataFrame(مہارت)

# اصل مہارت کا ڈیٹا

skills_df.show()

# JSON صف میں تبدیل کریں۔

json_skills_data = skills_df.toJSON().collect()

پرنٹ(json_skills_data)

آؤٹ پٹ:

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

| id|شخص|انعام| مہارت |

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

| 123 | شہد | 25000 | پینٹنگ |

| 112 | مونی | 2000 |میوزک/ڈانس|

| 153 |تلسی | 1200 | پڑھنا |

| 173 | بھاگ گیا | 2000 | موسیقی |

| 43 |کملا| 10000 | پڑھنا |

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

[ '{'id':123,'person':'Honey','prize':25000,'skill':'پینٹنگ'}' , '{'id':112,'person':'Mouni','prize':2000,'skill':'music/dance'}' , '{'id':153,'person':'Tulasi','prize':1200,'skill':'reading'}' , '{'id':173,'person':'Ran','prize':2000,'skill':'music'}' , '{'id':43,'person':'کملا','انعام':10000,'مہارت':'پڑھنا'}' ]

PySpark ڈیٹا فریم میں 5 قطاریں ہیں۔ یہ تمام 5 قطاریں تاروں کی لغت کے طور پر لوٹی جاتی ہیں جنہیں کوما سے الگ کیا جاتا ہے۔

Write.json() کا استعمال کرتے ہوئے JSON کو PySpark ڈیٹا فریم

write.json() طریقہ PySpark میں دستیاب ہے جو PySpark ڈیٹا فریم کو 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() کا استعمال کرتے ہوئے، ہم اس فنکشن میں 'اوور رائٹ' پاس کر کے 'ضمیمہ' پاس کر کے ڈیٹا کو شامل کر سکتے ہیں یا موجودہ JSON ڈیٹا کو اوور رائٹ کر سکتے ہیں۔

مثال 1:

3 قطاروں اور 4 کالموں کے ساتھ ایک 'Skills_df' PySpark ڈیٹا فریم بنائیں۔ اس ڈیٹا فریم کو JSON پر لکھیں۔

pyspark درآمد کریں۔

پانڈا درآمد کریں۔

pyspark.sql سے SparkSession درآمد کریں۔

linuxhint_spark_app = SparkSession.builder.appName( 'لینکس اشارہ' .getOrCreate()

3 قطاروں اور 4 کالموں کے ساتھ # مہارت کا ڈیٹا

ہنر =[{ 'id' : 123 , 'شخص' : 'شہد' , 'مہارت' : 'پینٹنگ' , 'انعام' : 25000

{ 'id' : 112 , 'شخص' : 'مونی' , 'مہارت' : 'رقص' , 'انعام' : 2000

{ 'id' : 153 , 'شخص' : 'تلسی' , 'مہارت' : 'پڑھنا' , 'انعام' : 1200 }

]

# مندرجہ بالا ڈیٹا سے مہارت کا ڈیٹا فریم بنائیں

skills_df = linuxhint_spark_app.createDataFrame(مہارت)

# write.json()

skills_df.coalesce( 1 .write.json( 'مہارت_ڈیٹا' )

JSON فائل:

ہم دیکھ سکتے ہیں کہ skills_data فولڈر میں تقسیم شدہ JSON ڈیٹا شامل ہے۔

آئیے JSON فائل کو کھولیں۔ ہم دیکھ سکتے ہیں کہ PySpark DataFrame کی تمام قطاریں JSON میں تبدیل ہو گئی ہیں۔

PySpark ڈیٹا فریم میں 5 قطاریں ہیں۔ یہ تمام 5 قطاریں تاروں کی لغت کے طور پر لوٹی جاتی ہیں جنہیں کوما سے الگ کیا جاتا ہے۔

مثال 2:

ایک قطار کے ساتھ 'Skills2_df' PySpark ڈیٹا فریم بنائیں۔ موڈ کو بطور 'ضمیمہ' بتا کر پچھلی JSON فائل میں ایک قطار شامل کریں۔

pyspark درآمد کریں۔

پانڈا درآمد کریں۔

pyspark.sql سے SparkSession درآمد کریں۔

linuxhint_spark_app = SparkSession.builder.appName( 'لینکس اشارہ' .getOrCreate()

مہارت2 =[{ 'id' : 78 , 'شخص' : 'مریم' , 'مہارت' : 'سوار' , 'انعام' : 8960 }

]

# مندرجہ بالا ڈیٹا سے مہارت کا ڈیٹا فریم بنائیں

skills2_df = linuxhint_spark_app.createDataFrame(Skills2)

# write.json() ضمیمہ موڈ کے ساتھ۔

مہارت2_df.write.mode( 'شامل' .json( 'مہارت_ڈیٹا' )

JSON فائل:

ہم تقسیم شدہ JSON فائلوں کو دیکھ سکتے ہیں۔ پہلی فائل میں پہلا ڈیٹا فریم ریکارڈ ہوتا ہے اور دوسری فائل میں دوسرا ڈیٹا فریم ریکارڈ ہوتا ہے۔

نتیجہ

PySpark DataFrame کو JSON میں تبدیل کرنے کے تین مختلف طریقے ہیں۔ سب سے پہلے، ہم نے to_json() طریقہ پر تبادلہ خیال کیا جو مختلف پیرامیٹرز پر غور کرکے مختلف مثالوں کے ساتھ PySpark ڈیٹا فریم کو Pandas DataFrame میں تبدیل کرکے JSON میں تبدیل ہوتا ہے۔ اگلا، ہم نے toJSON() طریقہ استعمال کیا۔ آخر میں، ہم نے JSON پر PySpark DataFrame لکھنے کے لیے write.json() فنکشن کو استعمال کرنے کا طریقہ سیکھا۔ اس فنکشن کے ساتھ شامل کرنا، اور اوور رائٹنگ ممکن ہے۔