PySpark DataFrame को JSON में कनवर्ट करना

Pyspark Dataframe Ko Json Mem Kanavarta Karana



JSON का उपयोग करके संरचित डेटा को ट्रांसमिट करना संभव है और कम मेमोरी की खपत भी करता है। जब PySpark RDD या PySpark DataFrame की तुलना में, JSON कम मेमोरी और क्रमांकन का उपभोग करता है जो JSON के साथ संभव है। हम pyspark.sql.DataFrameWriter.json() विधि का उपयोग करके PySpark DataFrame को JSON में बदलने में सक्षम हैं। इसके अलावा, DataFrame को JSON में कनवर्ट करने के दो अन्य तरीके हैं।

सामग्री का विषय:

आइए सभी उदाहरणों में एक साधारण PySpark DataFrame पर विचार करें और उल्लिखित कार्यों का उपयोग करके इसे JSON में परिवर्तित करें।







आवश्यक मॉड्यूल:

PySpark लाइब्रेरी को अपने वातावरण में स्थापित करें यदि यह अभी तक स्थापित नहीं है। आप इसे स्थापित करने के लिए निम्न कमांड का उल्लेख कर सकते हैं:



पिप पाइस्पार्क स्थापित करें

ToPandas () के साथ To_json () का उपयोग करके JSON के लिए PySpark DataFrame

To_json () विधि पंडों के मॉड्यूल में उपलब्ध है जो पंडों के डेटाफ़्रेम को JSON में परिवर्तित करता है। यदि हम अपने PySpark DataFrame को पांडा DataFrame में बदलते हैं तो हम इस विधि का उपयोग कर सकते हैं। PySpark DataFrame को पांडा DataFrame में बदलने के लिए, toPandas () विधि का उपयोग किया जाता है। आइए इसके मापदंडों के साथ to_json () का सिंटैक्स देखें।



वाक्य - विन्यास:





dataframe_object.toPandas().to_json(ओरिएंट, इंडेक्स,...)
  1. परिवर्तित JSON को वांछित प्रारूप के रूप में प्रदर्शित करने के लिए ओरिएंट का उपयोग किया जाता है। यह 'रिकॉर्ड', 'टेबल', 'वैल्यू', 'कॉलम', 'इंडेक्स', 'स्प्लिट' लेता है।
  2. परिवर्तित JSON स्ट्रिंग से अनुक्रमणिका को शामिल/निकालने के लिए अनुक्रमणिका का उपयोग किया जाता है। यदि इसे 'ट्रू' पर सेट किया जाता है, तो सूचकांक प्रदर्शित होते हैं। अन्यथा, यदि ओरिएंट 'स्प्लिट' या 'टेबल' है तो इंडेक्स प्रदर्शित नहीं होंगे।

उदाहरण 1: 'रिकॉर्ड्स' के रूप में ओरिएंट

3 पंक्तियों और 4 स्तंभों के साथ एक 'skills_df' PySpark DataFrame बनाएँ। ओरिएंट पैरामीटर को 'रिकॉर्ड' के रूप में निर्दिष्ट करके इस डेटाफ़्रेम को JSON में बदलें।

pyspark आयात करें

पांडा आयात करें

pyspark.sql से SparkSession आयात करें

linuxhint_spark_app = SparkSession.builder.appName ( 'लिनक्स संकेत' .getOrCreate()

# कौशल डेटा 3 पंक्तियों और 4 कॉलम के साथ

कौशल = [{ 'पहचान' : 123 , 'व्यक्ति' : 'शहद' , 'कौशल' : 'चित्रकारी' , 'इनाम' : 25000 },

{ 'पहचान' : 112 , 'व्यक्ति' : 'मौनी' , 'कौशल' : 'नृत्य' , 'इनाम' : 2000 },

{ 'पहचान' : 153 , 'व्यक्ति' : 'तुलसी' , 'कौशल' : 'अध्ययन' , 'इनाम' : 1200 }

]

# उपरोक्त डेटा से कौशल डेटाफ़्रेम बनाएं

कौशल_डीएफ = linuxhint_spark_app.createDataFrame (कौशल)

# वास्तविक कौशल डेटा

कौशल_डीएफ.शो ()

# 'रिकॉर्ड' के रूप में ओरिएंट के साथ to_json () का उपयोग करके JSON में कनवर्ट करें

json_skills_data = Skills_df.toPandas().to_json(ओरिएंट= 'अभिलेख' )

प्रिंट (json_skills_data)

आउटपुट:



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

| आईडी|व्यक्ति|पुरस्कार| कौशल|

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

| 123 | हनी| 25000 |पेंटिंग|

| 112 | मौनी| 2000 | नृत्य|

| 153 |तुलसी| 1200 | पढ़ना|

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

[{ 'पहचान' : 123 , 'व्यक्ति' : 'शहद' , 'इनाम' : 25000 , 'कौशल' : 'चित्रकारी' },{ 'पहचान' : 112 , 'व्यक्ति' : 'मौनी' , 'इनाम' : 2000 , 'कौशल' : 'नृत्य' },{ 'पहचान' : 153 , 'व्यक्ति' : 'तुलसी' , 'इनाम' : 1200 , 'कौशल' : 'अध्ययन' }]

हम देख सकते हैं कि PySpark DataFrame मानों के शब्दकोश के साथ JSON सरणी में परिवर्तित हो गया है। यहाँ, कुंजियाँ स्तंभ नाम का प्रतिनिधित्व करती हैं और मान PySpark DataFrame में पंक्ति / सेल मान का प्रतिनिधित्व करता है।

उदाहरण 2: ओरिएंट 'स्प्लिट' के रूप में

'स्प्लिट' ओरिएंट द्वारा लौटाए गए JSON प्रारूप में कॉलम नाम शामिल होते हैं जिनमें कॉलम की सूची, इंडेक्स की सूची और डेटा की सूची होती है। निम्नलिखित 'विभाजित' ओरिएंट का प्रारूप है।

# 'विभाजन' के रूप में ओरिएंट के साथ to_json () का उपयोग करके JSON में कनवर्ट करें

json_skills_data = Skills_df.toPandas().to_json(ओरिएंट= 'विभाजित करना' )

प्रिंट (json_skills_data)

आउटपुट:

{ 'कॉलम' :[ 'पहचान' , 'व्यक्ति' , 'इनाम' , 'कौशल' ], 'अनुक्रमणिका' :[ 0 , 1 , 2 ], 'आंकड़े' :[[ 123 , 'शहद' , 25000 , 'चित्रकारी' ], [ 112 , 'मौनी' , 2000 , 'नृत्य' ], [ 153 , 'तुलसी' , 1200 , 'अध्ययन' ]]}

उदाहरण 3: 'इंडेक्स' के रूप में ओरिएंट

यहाँ, PySpark DataFrame की प्रत्येक पंक्ति एक शब्दकोश के रूप में कॉलम नाम के रूप में कुंजी के साथ सेवानिवृत्त हो जाती है। प्रत्येक शब्दकोश के लिए, अनुक्रमणिका स्थिति एक कुंजी के रूप में निर्दिष्ट की जाती है।

# 'इंडेक्स' के रूप में ओरिएंट के साथ to_json () का उपयोग करके JSON में कनवर्ट करें

json_skills_data = Skills_df.toPandas().to_json(ओरिएंट= 'अनुक्रमणिका' )

प्रिंट (json_skills_data)

आउटपुट:

{ '0' :{ 'पहचान' : 123 , 'व्यक्ति' : 'शहद' , 'इनाम' : 25000 , 'कौशल' : 'चित्रकारी' }, '1' :{ 'पहचान' : 112 , 'व्यक्ति' : 'मौनी' , 'इनाम' : 2000 , 'कौशल' : 'नृत्य' }, '2' :{ 'पहचान' : 153 , 'व्यक्ति' : 'तुलसी' , 'इनाम' : 1200 , 'कौशल' : 'अध्ययन' }}

उदाहरण 4: 'कॉलम' के रूप में ओरिएंट करें

प्रत्येक रिकॉर्ड के लिए कॉलम कुंजी हैं। प्रत्येक कॉलम में एक शब्दकोश होता है जो इंडेक्स नंबरों के साथ कॉलम मान लेता है।

# 'कॉलम' के रूप में ओरिएंट के साथ to_json () का उपयोग करके JSON में कनवर्ट करें

json_skills_data = skills_df.toPandas().to_json(ओरिएंट= 'कॉलम' )

प्रिंट (json_skills_data)

आउटपुट:

{ 'पहचान' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'व्यक्ति' :{ '0' : 'शहद' , '1' : 'मौनी' , '2' : 'तुलसी' }, 'इनाम' :{ '0' : 25000 , '1' : 2000 , '2' : 1200 }, 'कौशल' :{ '0' : 'चित्रकारी' , '1' : 'नृत्य' , '2' : 'अध्ययन' }}

उदाहरण 5: 'मूल्यों' के रूप में ओरिएंट

यदि आपको JSON में केवल मानों की आवश्यकता है, तो आप 'मान' ओरिएंट के लिए जा सकते हैं। यह प्रत्येक पंक्ति को एक सूची में प्रदर्शित करता है। अंत में, सभी सूचियों को एक सूची में संग्रहीत किया जाता है। यह JSON नेस्टेड सूची प्रकार का है।

# to_json () का उपयोग करके JSON में ओरिएंट के साथ 'मान' के रूप में कनवर्ट करें

json_skills_data = Skills_df.toPandas().to_json(ओरिएंट= 'मान' )

प्रिंट (json_skills_data)

आउटपुट:

[[ 123 , 'शहद' , 25000 , 'चित्रकारी' ], [ 112 , 'मौनी' , 2000 , 'नृत्य' ], [ 153 , 'तुलसी' , 1200 , 'अध्ययन' ]]

उदाहरण 6: 'टेबल' के रूप में ओरिएंट

'टेबल' ओरिएंट JSON लौटाता है जिसमें कॉलम डेटा प्रकारों के साथ फ़ील्ड नामों के साथ स्कीमा, प्राथमिक कुंजी के रूप में इंडेक्स और पांडा संस्करण शामिल हैं। मान वाले कॉलम नाम 'डेटा' के रूप में प्रदर्शित होते हैं।

# 'तालिका' के रूप में ओरिएंट के साथ to_json () का उपयोग करके JSON में कनवर्ट करें

json_skills_data = Skills_df.toPandas().to_json(ओरिएंट= 'मेज' )

प्रिंट (json_skills_data)

आउटपुट:

{ 'योजना' :{ 'खेत' :[{ 'नाम' : 'अनुक्रमणिका' , 'प्रकार' : 'पूर्णांक' },{ 'नाम' : 'पहचान' , 'प्रकार' : 'पूर्णांक' },{ 'नाम' : 'व्यक्ति' , 'प्रकार' : 'डोरी' },{ 'नाम' : 'इनाम' , 'प्रकार' : 'पूर्णांक' },{ 'नाम' : 'कौशल' , 'प्रकार' : 'डोरी' }], 'प्राथमिक कुंजी' :[ 'अनुक्रमणिका' ], 'पांडा_संस्करण' : '1.4.0' }, 'आंकड़े' :[{ 'अनुक्रमणिका' : 0 , 'पहचान' : 123 , 'व्यक्ति' : 'शहद' , 'इनाम' : 25000 , 'कौशल' : 'चित्रकारी' },{ 'अनुक्रमणिका' : 1 , 'पहचान' : 112 , 'व्यक्ति' : 'मौनी' , 'इनाम' : 2000 , 'कौशल' : 'नृत्य' },{ 'अनुक्रमणिका' : 2 , 'पहचान' : 153 , 'व्यक्ति' : 'तुलसी' , 'इनाम' : 1200 , 'कौशल' : 'अध्ययन' }]}

उदाहरण 7: इंडेक्स पैरामीटर के साथ

सबसे पहले, हम इंडेक्स पैरामीटर को 'ट्रू' पर सेट करके पास करते हैं। आप प्रत्येक स्तंभ मान के लिए देखेंगे कि सूचकांक स्थिति एक शब्दकोश में एक कुंजी के रूप में वापस आ गई है।

दूसरे आउटपुट में, केवल कॉलम नाम ('कॉलम') और रिकॉर्ड ('डेटा') इंडेक्स पोजीशन के बिना लौटाए जाते हैं क्योंकि इंडेक्स 'गलत' पर सेट होता है।

# इंडेक्स = ट्रू के साथ to_json () का उपयोग करके JSON में कनवर्ट करें

json_skills_data = skills_df.toPandas().to_json(इंडेक्स=ट्रू)

प्रिंट (json_skills_data, ' \एन ' )

# सूचकांक के साथ to_json () का उपयोग करके JSON में कनवर्ट करें = गलत

json_skills_data= skills_df.toPandas().to_json(इंडेक्स=गलत,ओरिएंट= 'विभाजित करना' )

प्रिंट (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 , 'अध्ययन' ]]

ToJSON () का उपयोग करके JSON के लिए PySpark DataFrame

ToJSON () विधि का उपयोग PySpark DataFrame को JSON ऑब्जेक्ट में बदलने के लिए किया जाता है। असल में, यह एक JSON स्ट्रिंग देता है जो एक सूची से घिरा हुआ है। ['{स्तंभ:मान,...}',...। ] वह प्रारूप है जो इस फ़ंक्शन द्वारा लौटाया जाता है। यहां, PySpark DataFrame की प्रत्येक पंक्ति को कुंजी के रूप में स्तंभ नाम के साथ एक शब्दकोश के रूप में लौटाया जाता है।

वाक्य - विन्यास:

dataframe_object.toJSON ()

इंडेक्स, कॉलम लेबल और डेटा टाइप जैसे पैरामीटर को पास करना संभव हो सकता है।

उदाहरण:

5 पंक्तियों और 4 स्तंभों के साथ एक 'skills_df' PySpark DataFrame बनाएँ। इस DataFrame को JSON में बदलने के लिए toJSON () विधि का उपयोग करें।

pyspark आयात करें

pyspark.sql से SparkSession आयात करें

linuxhint_spark_app = SparkSession.builder.appName ( 'लिनक्स संकेत' .getOrCreate()

# कौशल डेटा 5 पंक्तियों और 4 कॉलम के साथ

कौशल = [{ 'पहचान' : 123 , 'व्यक्ति' : 'शहद' , 'कौशल' : 'चित्रकारी' , 'इनाम' : 25000 },

{ 'पहचान' : 112 , 'व्यक्ति' : 'मौनी' , 'कौशल' : 'संगीत/नृत्य' , 'इनाम' : 2000 },

{ 'पहचान' : 153 , 'व्यक्ति' : 'तुलसी' , 'कौशल' : 'अध्ययन' , 'इनाम' : 1200 },

{ 'पहचान' : 173 , 'व्यक्ति' : 'दौड़ा' , 'कौशल' : 'संगीत' , 'इनाम' : 2000 },

{ 'पहचान' : 43 , 'व्यक्ति' : 'कमला' , 'कौशल' : 'अध्ययन' , 'इनाम' : 10000 }

]

# उपरोक्त डेटा से कौशल डेटाफ़्रेम बनाएं

कौशल_डीएफ = linuxhint_spark_app.createDataFrame (कौशल)

# वास्तविक कौशल डेटा

कौशल_डीएफ.शो ()

# JSON सरणी में कनवर्ट करें

json_skills_data = skills_df.toJSON().collect()

प्रिंट (json_skills_data)

आउटपुट:

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

| आईडी|व्यक्ति|पुरस्कार| कौशल|

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

| 123 | हनी| 25000 | पेंटिंग|

| 112 | मौनी| 2000 |संगीत/नृत्य|

| 153 |तुलसी| 1200 | पढ़ना|

| 173 | रैन| 2000 | संगीत|

| 43 |कमला| 10000 | पढ़ना|

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

[ '{'आईडी':123,'व्यक्ति':'शहद','पुरस्कार':25000,'कौशल':'पेंटिंग'}' , '{'आईडी':112,'व्यक्ति':'मौनी','पुरस्कार':2000,'कौशल':'संगीत/नृत्य'}' , '{'आईडी':153,'व्यक्ति':'तुलसी','पुरस्कार':1200,'कौशल':'पढ़ना'}' , '{'आईडी':173,'व्यक्ति':'भागा','पुरस्कार':2000,'कौशल':'संगीत'}' , '{'आईडी':43,'व्यक्ति':'कमला','पुरस्कार':10000,'कौशल':'पढ़ना'}' ]

PySpark DataFrame में 5 पंक्तियाँ हैं। इन सभी 5 पंक्तियों को अल्पविराम द्वारा अलग किए गए तार के शब्दकोश के रूप में लौटाया जाता है।

JSON के लिए PySpark DataFrame Write.json () का उपयोग करना

राइट.जेसन () विधि PySpark में उपलब्ध है जो PySpark DataFrame को JSON फ़ाइल में लिखता/सहेजता है। यह फ़ाइल नाम/पथ को पैरामीटर के रूप में लेता है। मूल रूप से, यह JSON को कई फ़ाइलों (विभाजित फ़ाइलों) में लौटाता है। उन सभी को एक ही फाइल में मर्ज करने के लिए, हम कोलेस () विधि का उपयोग कर सकते हैं।

वाक्य - विन्यास:

dataframe_object.coalesce ( 1 .write.json ('file_name')
  1. एपेंड मोड - dataframe_object.write.mode ('संलग्न')। json ('file_name')
  2. ओवरराइट मोड - dataframe_object.write.mode ('ओवरराइट')। json ('file_name')

मौजूदा JSON को जोड़ना/ओवरराइट करना संभव हो सकता है। राइट.मोड () का उपयोग करके, हम 'संलग्न' पास करके डेटा को जोड़ सकते हैं या इस फ़ंक्शन को 'ओवरराइट' पास करके मौजूदा JSON डेटा को अधिलेखित कर सकते हैं।

उदाहरण 1:

3 पंक्तियों और 4 स्तंभों के साथ एक 'skills_df' PySpark DataFrame बनाएँ। इस DataFrame को JSON में लिखें।

pyspark आयात करें

पांडा आयात करें

pyspark.sql से SparkSession आयात करें

linuxhint_spark_app = SparkSession.builder.appName ( 'लिनक्स संकेत' .getOrCreate()

# कौशल डेटा 3 पंक्तियों और 4 कॉलम के साथ

कौशल = [{ 'पहचान' : 123 , 'व्यक्ति' : 'शहद' , 'कौशल' : 'चित्रकारी' , 'इनाम' : 25000 },

{ 'पहचान' : 112 , 'व्यक्ति' : 'मौनी' , 'कौशल' : 'नृत्य' , 'इनाम' : 2000 },

{ 'पहचान' : 153 , 'व्यक्ति' : 'तुलसी' , 'कौशल' : 'अध्ययन' , 'इनाम' : 1200 }

]

# उपरोक्त डेटा से कौशल डेटाफ़्रेम बनाएं

कौशल_डीएफ = linuxhint_spark_app.createDataFrame (कौशल)

# लिखें.जेसन ()

कौशल_df.coalesce ( 1 .लिखना.json( 'कौशल_डेटा' )

जेएसओएन फ़ाइल:

हम देख सकते हैं कि skills_data फ़ोल्डर में विभाजित JSON डेटा शामिल है।

आइए JSON फ़ाइल खोलें। हम देख सकते हैं कि PySpark DataFrame की सभी पंक्तियाँ JSON में परिवर्तित हो गई हैं।

PySpark DataFrame में 5 पंक्तियाँ हैं। इन सभी 5 पंक्तियों को अल्पविराम द्वारा अलग किए गए तार के शब्दकोश के रूप में लौटाया जाता है।

उदाहरण 2:

एक पंक्ति के साथ एक 'कौशल2_df' PySpark DataFrame बनाएँ। मोड को 'संलग्न' के रूप में निर्दिष्ट करके पिछली JSON फ़ाइल में एक पंक्ति जोड़ें।

pyspark आयात करें

पांडा आयात करें

pyspark.sql से SparkSession आयात करें

linuxhint_spark_app = SparkSession.builder.appName ( 'लिनक्स संकेत' .getOrCreate()

कौशल2 = [{ 'पहचान' : 78 , 'व्यक्ति' : 'मैरी' , 'कौशल' : 'सवारी' , 'इनाम' : 8960 }

]

# उपरोक्त डेटा से कौशल डेटाफ़्रेम बनाएं

Skill2_df = linuxhint_spark_app.createDataFrame(skills2)

# write.json () एपेंड मोड के साथ।

कौशल2_df.लिखना.मोड ( 'संलग्न' .जेसन ( 'कौशल_डेटा' )

जेएसओएन फ़ाइल:

हम विभाजित JSON फ़ाइलें देख सकते हैं। पहली फ़ाइल में पहला डेटाफ़्रेम रिकॉर्ड होता है और दूसरी फ़ाइल में दूसरा डेटाफ़्रेम रिकॉर्ड होता है।

निष्कर्ष

PySpark DataFrame को JSON में बदलने के तीन अलग-अलग तरीके हैं। सबसे पहले, हमने to_json () पद्धति पर चर्चा की, जो विभिन्न मापदंडों पर विचार करके विभिन्न उदाहरणों के साथ PySpark DataFrame को पांडा DataFrame में परिवर्तित करके JSON में परिवर्तित हो जाती है। अगला, हमने toJSON () पद्धति का उपयोग किया। अंत में, हमने सीखा कि JSON में PySpark DataFrame लिखने के लिए राइट.जॉन () फ़ंक्शन का उपयोग कैसे करें। इस फ़ंक्शन के साथ जोड़ना और ओवरराइट करना संभव है।