Paksa ng Nilalaman:
- PySpark DataFrame sa JSON Gamit ang To_json() kasama ang ToPandas()
- PySpark DataFrame sa JSON Gamit ang ToJSON()
- PySpark DataFrame sa JSON Gamit ang Write.json()
Isaalang-alang natin ang isang simpleng PySpark DataFrame sa lahat ng mga halimbawa at i-convert ito sa JSON gamit ang mga nabanggit na function.
Kinakailangang Module:
I-install ang library ng PySpark sa iyong kapaligiran kung hindi pa ito naka-install. Maaari kang sumangguni sa sumusunod na utos upang mai-install ito:
pip install pyspark
PySpark DataFrame sa JSON Gamit ang To_json() kasama ang ToPandas()
Ang to_json() method ay available sa Pandas module na nagko-convert sa Pandas DataFrame sa JSON. Magagamit namin ang paraang ito kung iko-convert namin ang aming PySpark DataFrame sa Pandas DataFrame. Upang ma-convert ang PySpark DataFrame sa Pandas DataFrame, ginagamit ang toPandas() method. Tingnan natin ang syntax ng to_json() kasama ang mga parameter nito.
Syntax:
dataframe_object.toPandas().to_json(orient,index,...)
- Ginagamit ang Orient upang ipakita ang na-convert na JSON bilang gustong format. Nangangailangan ito ng 'mga talaan', 'talahanayan', 'mga halaga', 'mga hanay', 'index', 'hati'.
- Ginagamit ang index upang isama/alisin ang index mula sa na-convert na string ng JSON. Kung ito ay nakatakda sa 'True', ang mga indeks ay ipinapakita. Kung hindi, hindi ipapakita ang mga indeks kung ang orient ay 'split' o 'table'.
Halimbawa 1: Orient bilang 'Mga Tala'
Gumawa ng 'skills_df' PySpark DataFrame na may 3 row at 4 na column. I-convert ang DataFrame na ito sa JSON sa pamamagitan ng pagtukoy sa orient parameter bilang 'mga tala'.
import pysparkmag-import ng mga panda
mula sa pyspark.sql import SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()
# data ng kasanayan na may 3 row at 4 na column
kasanayan =[{ 'id' : 123 , 'tao' : 'Honey' , 'kasanayan' : 'pagpipinta' , 'premyo' : 25000 },
{ 'id' : 112 , 'tao' : 'Mouni' , 'kasanayan' : 'sayaw' , 'premyo' : 2000 },
{ 'id' : 153 , 'tao' : 'Tulasi' , 'kasanayan' : 'pagbabasa' , 'premyo' : 1200 }
]
# lumikha ng dataframe ng mga kasanayan mula sa data sa itaas
skills_df = linuxhint_spark_app.createDataFrame(skills)
# Aktwal na data ng kasanayan
skills_df.show()
# I-convert sa JSON gamit ang to_json() na may orient bilang 'record'
json_skills_data = skills_df.toPandas().to_json(orient= 'record' )
print(json_skills_data)
Output:
+---+------+-----+--------+
| id|tao|premyo| kasanayan|
+---+------+-----+--------+
| 123 | Honey| 25000 |pintura|
| 112 | Mouni| 2000 | sayaw|
| 153 |Tulasi| 1200 | pagbabasa|
+---+------+-----+--------+
[{ 'id' : 123 , 'tao' : 'Honey' , 'premyo' : 25000 , 'kasanayan' : 'pagpipinta' },{ 'id' : 112 , 'tao' : 'Mouni' , 'premyo' : 2000 , 'kasanayan' : 'sayaw' },{ 'id' : 153 , 'tao' : 'Tulasi' , 'premyo' : 1200 , 'kasanayan' : 'nagbabasa' }]
Makikita natin na ang PySpark DataFrame ay na-convert sa JSON array na may diksyunaryo ng mga value. Dito, kinakatawan ng mga key ang pangalan ng column at ang value ay kumakatawan sa row/cell value sa PySpark DataFrame.
Halimbawa 2: Orient bilang 'Split'
Kasama sa format ng JSON na ibinalik ng 'split' orient ang mga pangalan ng column na may listahan ng mga column, listahan ng index, at listahan ng data. Ang sumusunod ay ang format ng 'split' orient.
# I-convert sa JSON gamit ang to_json() na may orient bilang 'split'
json_skills_data = skills_df.toPandas().to_json(orient= 'hati' )
print(json_skills_data)
Output:
{ 'mga hanay' :[ 'id' , 'tao' , 'premyo' , 'kasanayan' ], 'index' :[ 0 , 1 , 2 ], 'data' :[[ 123 , 'Honey' , 25000 , 'pagpipinta' ],[ 112 , 'Mouni' , 2000 , 'sayaw' ],[ 153 , 'Tulasi' , 1200 , 'nagbabasa' ]]}Halimbawa 3: Orient bilang 'Index'
Dito, ang bawat hilera mula sa PySpark DataFrame ay inihinto sa anyo ng isang diksyunaryo na may susi bilang pangalan ng column. Para sa bawat diksyunaryo, ang posisyon ng index ay tinukoy bilang isang susi.
# I-convert sa JSON gamit ang to_json() na may orient bilang 'index'
json_skills_data = skills_df.toPandas().to_json(orient= 'index' )
print(json_skills_data)
Output:
{ '0' :{ 'id' : 123 , 'tao' : 'Honey' , 'premyo' : 25000 , 'kasanayan' : 'pagpipinta' }, '1' :{ 'id' : 112 , 'tao' : 'Mouni' , 'premyo' : 2000 , 'kasanayan' : 'sayaw' }, '2' :{ 'id' : 153 , 'tao' : 'Tulasi' , 'premyo' : 1200 , 'kasanayan' : 'nagbabasa' }}Halimbawa 4: Orient bilang 'Mga Column'
Ang mga hanay ay ang susi para sa bawat tala. Ang bawat column ay may hawak na diksyunaryo na kumukuha ng mga value ng column na may mga index na numero.
# I-convert sa JSON gamit ang to_json() na may orient bilang 'columns'
json_skills_data = skills_df.toPandas().to_json(orient= 'mga hanay' )
print(json_skills_data)
Output:
{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'tao' :{ '0' : 'Honey' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'premyo' :{ '0' : 25000 , '1' : 2000 , '2' : 1200 }, 'kasanayan' :{ '0' : 'pagpipinta' , '1' : 'sayaw' , '2' : 'nagbabasa' }}Halimbawa 5: Orient bilang 'Mga Halaga'
Kung kailangan mo lang ng mga value sa JSON, maaari kang pumunta para sa 'values' orient. Ipinapakita nito ang bawat hilera sa isang listahan. Sa wakas, ang lahat ng mga listahan ay naka-imbak sa isang listahan. Ang JSON na ito ay nasa nested na uri ng listahan.
# I-convert sa JSON gamit ang to_json() na may orient bilang 'mga halaga'
json_skills_data = skills_df.toPandas().to_json(orient= 'mga halaga' )
print(json_skills_data)
Output:
[[ 123 , 'Honey' , 25000 , 'pagpipinta' ],[ 112 , 'Mouni' , 2000 , 'sayaw' ],[ 153 , 'Tulasi' , 1200 , 'nagbabasa' ]]Halimbawa 6: Orient bilang 'Talahanayan'
Ibinabalik ng 'table' orient ang JSON na kinabibilangan ng schema na may mga pangalan ng field kasama ang mga uri ng data ng column, ang index bilang pangunahing key at ang bersyon ng Pandas. Ang mga pangalan ng column na may mga value ay ipinapakita bilang 'data'.
# I-convert sa JSON gamit ang to_json() na may orient bilang 'table'
json_skills_data = skills_df.toPandas().to_json(orient= 'table' )
print(json_skills_data)
Output:
{ 'schema' :{ 'mga patlang' :[{ 'pangalan' : 'index' , 'uri' : 'integer' },{ 'pangalan' : 'id' , 'uri' : 'integer' },{ 'pangalan' : 'tao' , 'uri' : 'kuwerdas' },{ 'pangalan' : 'premyo' , 'uri' : 'integer' },{ 'pangalan' : 'kasanayan' , 'uri' : 'kuwerdas' }], 'pangunahing susi' :[ 'index' ], 'pandas_version' : '1.4.0' }, 'data' :[{ 'index' : 0 , 'id' : 123 , 'tao' : 'Honey' , 'premyo' : 25000 , 'kasanayan' : 'pagpipinta' },{ 'index' : 1 , 'id' : 112 , 'tao' : 'Mouni' , 'premyo' : 2000 , 'kasanayan' : 'sayaw' },{ 'index' : 2 , 'id' : 153 , 'tao' : 'Tulasi' , 'premyo' : 1200 , 'kasanayan' : 'nagbabasa' }]}Halimbawa 7: May Index Parameter
Una, ipinapasa namin ang parameter ng index sa pamamagitan ng pagtatakda nito sa 'True'. Makikita mo para sa bawat halaga ng column na ang posisyon ng index ay ibinalik bilang isang susi sa isang diksyunaryo.
Sa pangalawang output, tanging ang mga pangalan ng column ('column') at records ('data') ang ibinabalik nang walang mga posisyon sa index dahil nakatakda ang index sa 'False'.
# I-convert sa JSON gamit ang to_json() na may index=Truejson_skills_data = skills_df.toPandas().to_json(index=True)
print(json_skills_data, ' \n ' )
# I-convert sa JSON gamit ang to_json() na may index=False
json_skills_data= skills_df.toPandas().to_json(index=False,orient= 'hati' )
print(json_skills_data)
Output:
{ 'id' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'tao' :{ '0' : 'Honey' , '1' : 'Mouni' , '2' : 'Tulasi' }, 'premyo' :{ '0' : 25000 , '1' : 2000 , '2' : 1200 }, 'kasanayan' :{ '0' : 'pagpipinta' , '1' : 'sayaw' , '2' : 'nagbabasa' }}{ 'mga hanay' :[ 'id' , 'tao' , 'premyo' , 'kasanayan' ], 'data' :[[ 123 , 'Honey' , 25000 , 'pagpipinta' ],[ 112 , 'Mouni' , 2000 , 'sayaw' ],[ 153 , 'Tulasi' , 1200 , 'nagbabasa' ]]
PySpark DataFrame sa JSON Gamit ang ToJSON()
Ang toJSON() method ay ginagamit para i-convert ang PySpark DataFrame sa isang JSON object. Karaniwan, nagbabalik ito ng isang string ng JSON na napapalibutan ng isang listahan. Ang [‘{column:value,…}’,…. ] ay ang format na ibinalik ng function na ito. Dito, ibinabalik ang bawat hilera mula sa PySpark DataFrame bilang isang diksyunaryo na may pangalan ng column bilang susi.
Syntax:
dataframe_object.toJSON()Posibleng ipasa ang mga parameter tulad ng index, mga label ng column, at uri ng data.
Halimbawa:
Gumawa ng 'skills_df' PySpark DataFrame na may 5 row at 4 na column. I-convert ang DataFrame na ito sa JSON gamit ang toJSON() method.
import pysparkmula sa pyspark.sql import SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()
# data ng kasanayan na may 5 row at 4 na column
kasanayan =[{ 'id' : 123 , 'tao' : 'Honey' , 'kasanayan' : 'pagpipinta' , 'premyo' : 25000 },
{ 'id' : 112 , 'tao' : 'Mouni' , 'kasanayan' : 'musika/sayaw' , 'premyo' : 2000 },
{ 'id' : 153 , 'tao' : 'Tulasi' , 'kasanayan' : 'pagbabasa' , 'premyo' : 1200 },
{ 'id' : 173 , 'tao' : 'Tumakbo' , 'kasanayan' : 'musika' , 'premyo' : 2000 },
{ 'id' : 43 , 'tao' : 'Kamala' , 'kasanayan' : 'pagbabasa' , 'premyo' : 10000 }
]
# lumikha ng dataframe ng mga kasanayan mula sa data sa itaas
skills_df = linuxhint_spark_app.createDataFrame(skills)
# Aktwal na data ng kasanayan
skills_df.show()
# I-convert sa JSON array
json_skills_data = skills_df.toJSON().collect()
print(json_skills_data)
Output:
+---+------+-----+-----------+| id|tao|premyo| kasanayan|
+---+------+-----+-----------+
| 123 | Honey| 25000 | pagpipinta|
| 112 | Mouni| 2000 |musika/sayaw|
| 153 |Tulasi| 1200 | pagbabasa|
| 173 | Tumakbo| 2000 | musika|
| 43 |Kamala| 10000 | pagbabasa|
+---+------+-----+-----------+
[ '{'id':123,'person':'Honey','prize':25000,'skill':'painting'}' , '{'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':'Kamala','prize':10000,'skill':'reading'}' ]
Mayroong 5 row sa PySpark DataFrame. Ang lahat ng 5 row na ito ay ibinalik bilang isang diksyunaryo ng mga string na pinaghihiwalay ng kuwit.
PySpark DataFrame sa JSON Gamit ang Write.json()
Ang write.json() method ay available sa PySpark na nagsusulat/nagse-save ng PySpark DataFrame sa isang JSON file. Kinukuha nito ang pangalan/path ng file bilang isang parameter. Karaniwang, ibinabalik nito ang JSON sa maraming mga file (mga nahati na file). Upang pagsamahin ang lahat ng mga ito sa isang file, maaari naming gamitin ang coalesce() method.
Syntax:
dataframe_object.coalesce( 1 ).write.json('file_name')- Append Mode – dataframe_object.write.mode('append').json('file_name')
- Overwrite Mode – dataframe_object.write.mode('overwrite').json('file_name')
Posibleng idagdag/i-overwrite ang kasalukuyang JSON. Gamit ang write.mode(), maaari naming idagdag ang data sa pamamagitan ng pagpasa ng 'idagdag' o i-overwrite ang kasalukuyang data ng JSON sa pamamagitan ng pagpasa ng 'overwrite' sa function na ito.
Halimbawa 1:
Gumawa ng 'skills_df' PySpark DataFrame na may 3 row at 4 na column. Isulat ang DataFrame na ito sa JSON.
import pysparkmag-import ng mga panda
mula sa pyspark.sql import SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()
# data ng kasanayan na may 3 row at 4 na column
kasanayan =[{ 'id' : 123 , 'tao' : 'Honey' , 'kasanayan' : 'pagpipinta' , 'premyo' : 25000 },
{ 'id' : 112 , 'tao' : 'Mouni' , 'kasanayan' : 'sayaw' , 'premyo' : 2000 },
{ 'id' : 153 , 'tao' : 'Tulasi' , 'kasanayan' : 'pagbabasa' , 'premyo' : 1200 }
]
# lumikha ng dataframe ng mga kasanayan mula sa data sa itaas
skills_df = linuxhint_spark_app.createDataFrame(skills)
# write.json()
skills_df.coalesce( 1 ).write.json( 'skills_data' )
JSON File:
Makikita natin na kasama sa folder ng skills_data ang naka-partition na data ng JSON.
Buksan natin ang JSON file. Makikita natin na ang lahat ng row mula sa PySpark DataFrame ay na-convert sa JSON.
Mayroong 5 row sa PySpark DataFrame. Ang lahat ng 5 row na ito ay ibinalik bilang isang diksyunaryo ng mga string na pinaghihiwalay ng kuwit.
Halimbawa 2:
Gumawa ng 'skills2_df' PySpark DataFrame na may isang row. Magdagdag ng isang row sa nakaraang JSON file sa pamamagitan ng pagtukoy sa mode bilang 'idagdag.'
import pysparkmag-import ng mga panda
mula sa pyspark.sql import SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()
kasanayan2 =[{ 'id' : 78 , 'tao' : 'Maria' , 'kasanayan' : 'nakasakay' , 'premyo' : 8960 }
]
# lumikha ng dataframe ng mga kasanayan mula sa data sa itaas
skills2_df = linuxhint_spark_app.createDataFrame(skills2)
# write.json() na may append mode.
skills2_df.write.mode( 'dugtungan' ).json( 'skills_data' )
JSON File:
Nakikita natin ang mga naka-partition na JSON file. Ang unang file ay nagtataglay ng unang mga tala ng DataFrame at ang pangalawang file ay nagtataglay ng pangalawang tala ng DataFrame.
Konklusyon
Mayroong tatlong magkakaibang paraan upang i-convert ang PySpark DataFrame sa JSON. Una, tinalakay namin ang to_json() method na nagko-convert sa JSON sa pamamagitan ng pag-convert ng PySpark DataFrame sa Pandas DataFrame na may iba't ibang halimbawa sa pamamagitan ng pagsasaalang-alang sa iba't ibang parameter. Susunod, ginamit namin ang toJSON() na paraan. Panghuli, natutunan namin kung paano gamitin ang write.json() function para isulat ang PySpark DataFrame sa JSON. Ang pagdaragdag, at pag-overwrit ay posible sa function na ito.