Тема на съдържанието:
- PySpark DataFrame към JSON с помощта на To_json() с ToPandas()
- PySpark DataFrame към JSON с помощта на ToJSON()
- PySpark DataFrame към JSON с помощта на Write.json()
Нека да разгледаме прост PySpark DataFrame във всички примери и да го конвертираме в JSON с помощта на споменатите функции.
Необходим модул:
Инсталирайте библиотеката PySpark във вашата среда, ако все още не е инсталирана. Можете да се обърнете към следната команда, за да я инсталирате:
pip инсталирайте 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 се използва за показване на конвертирания JSON като желания формат. Той приема „записи“, „таблица“, „стойности“, „колони“, „индекс“, „разделяне“.
- Индексът се използва за включване/премахване на индекса от преобразувания JSON низ. Ако е зададено на “True”, се показват индексите. В противен случай индексите няма да се показват, ако ориентът е „разделен“ или „таблица“.
Пример 1: Ориентирайте като „Записи“
Създайте “skills_df” PySpark DataFrame с 3 реда и 4 колони. Преобразувайте този DataFrame в JSON, като посочите параметъра orient като „записи“.
импортиране на pysparkвносни панди
от pyspark.sql импортирайте SparkSession
linuxhint_spark_app = SparkSession.builder.appName( „Linux Hint“ ).getOrCreate()
# данни за умения с 3 реда и 4 колони
умения =[{ 'документ за самоличност' : 123 , 'лице' : 'Пчелен мед' , 'умение' : 'живопис' , 'награда' : 25 000 },
{ 'документ за самоличност' : 112 , 'лице' : „Муни“ , 'умение' : 'танц' , 'награда' : 2000 г },
{ 'документ за самоличност' : 153 , 'лице' : „Туласи“ , 'умение' : 'четене' , 'награда' : 1200 }
]
# създайте рамката с данни за умения от горните данни
skills_df = linuxhint_spark_app.createDataFrame(умения)
# Действителни данни за умения
skills_df.show()
# Конвертиране в JSON с помощта на to_json() с ориентир като „записи“
json_skills_data = skills_df.toPandas().to_json(ориент= 'записи' )
печат (json_skills_data)
Изход:
+---+------+-----+--------+
| id|лице|награда| умение|
+---+------+-----+--------+
| 123 | Скъпа| 25 000 |рисуване|
| 112 | Муни| 2000 г | танц|
| 153 |Туласи| 1200 | четене|
+---+------+-----+--------+
[{ 'документ за самоличност' : 123 , 'човек' : 'Пчелен мед' , 'награда' : 25 000 , 'умение' : 'рисуване' },{ 'документ за самоличност' : 112 , 'човек' : 'Муни' , 'награда' : 2000 г , 'умение' : 'танц' },{ 'документ за самоличност' : 153 , 'човек' : 'Туласи' , 'награда' : 1200 , 'умение' : 'четене' }]
Можем да видим, че PySpark DataFrame се преобразува в JSON масив с речник от стойности. Тук ключовете представляват името на колоната, а стойността представлява стойността на ред/клетка в PySpark DataFrame.
Пример 2: Ориентирайте като „Разцепване“
Форматът JSON, който се връща от „разделения“ ориент, включва имената на колони, които имат списък с колони, списък с индекси и списък с данни. Следва форматът на „разделения“ ориент.
# Конвертирайте в JSON с помощта на to_json() с ориентация като 'split'
json_skills_data = skills_df.toPandas().to_json(ориент= 'разделяне' )
печат (json_skills_data)
Изход:
{ 'колони' :[ 'документ за самоличност' , 'човек' , 'награда' , 'умение' ], 'индекс' :[ 0 , 1 , 2 ], 'данни' :[[ 123 , 'Пчелен мед' , 25 000 , 'рисуване' ],[ 112 , 'Муни' , 2000 г , 'танц' ],[ 153 , 'Туласи' , 1200 , 'четене' ]]}Пример 3: Ориентирайте като „Индекс“
Тук всеки ред от PySpark DataFrame се оттегля под формата на речник с ключа като име на колона. За всеки речник позицията на индекса е посочена като ключ.
# Конвертирайте в JSON с помощта на to_json() с ориентация като 'индекс'
json_skills_data = skills_df.toPandas().to_json(ориент= 'индекс' )
печат (json_skills_data)
Изход:
{ '0' :{ 'документ за самоличност' : 123 , 'човек' : 'Пчелен мед' , 'награда' : 25 000 , 'умение' : 'рисуване' }, '1' :{ 'документ за самоличност' : 112 , 'човек' : 'Муни' , 'награда' : 2000 г , 'умение' : 'танц' }, '2' :{ 'документ за самоличност' : 153 , 'човек' : 'Туласи' , 'награда' : 1200 , 'умение' : 'четене' }}Пример 4: Ориентирайте като „Колони“
Колоните са ключът за всеки запис. Всяка колона съдържа речник, който приема стойностите на колоните с индексни номера.
# Конвертирайте в JSON с помощта на to_json() с ориентация като „колони“
json_skills_data = skills_df.toPandas().to_json(ориент= 'колони' )
печат (json_skills_data)
Изход:
{ 'документ за самоличност' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'човек' :{ '0' : 'Пчелен мед' , '1' : 'Муни' , '2' : 'Туласи' }, 'награда' :{ '0' : 25 000 , '1' : 2000 г , '2' : 1200 }, 'умение' :{ '0' : 'рисуване' , '1' : 'танц' , '2' : 'четене' }}Пример 5: Ориентирайте като „Ценности“
Ако имате нужда само от стойностите в JSON, можете да изберете ориентацията „стойности“. Той показва всеки ред в списък. И накрая, всички списъци се съхраняват в списък. Този JSON е от тип вложен списък.
# Конвертиране в JSON с помощта на to_json() с ориентир като „стойности“
json_skills_data = skills_df.toPandas().to_json(ориент= 'стойности' )
печат (json_skills_data)
Изход:
[[ 123 , 'Пчелен мед' , 25 000 , 'рисуване' ],[ 112 , 'Муни' , 2000 г , 'танц' ],[ 153 , 'Туласи' , 1200 , 'четене' ]]Пример 6: Ориентиране като „Таблица“
Ориентът „таблица“ връща JSON, който включва схемата с имената на полетата заедно с типовете данни на колоните, индексът като първичен ключ и версията на Pandas. Имената на колоните със стойности се показват като „данни“.
# Конвертиране в JSON с помощта на to_json() с ориентация като 'таблица'
json_skills_data = skills_df.toPandas().to_json(ориент= 'маса' )
печат (json_skills_data)
Изход:
{ 'схема' :{ 'поля' :[{ 'име' : 'индекс' , 'Тип' : 'цяло число' },{ 'име' : 'документ за самоличност' , 'Тип' : 'цяло число' },{ 'име' : 'човек' , 'Тип' : 'низ' },{ 'име' : 'награда' , 'Тип' : 'цяло число' },{ 'име' : 'умение' , 'Тип' : 'низ' }], 'първичен ключ' :[ 'индекс' ], 'pandas_version' : '1.4.0' }, 'данни' :[{ 'индекс' : 0 , 'документ за самоличност' : 123 , 'човек' : 'Пчелен мед' , 'награда' : 25 000 , 'умение' : 'рисуване' },{ 'индекс' : 1 , 'документ за самоличност' : 112 , 'човек' : 'Муни' , 'награда' : 2000 г , 'умение' : 'танц' },{ 'индекс' : 2 , 'документ за самоличност' : 153 , 'човек' : 'Туласи' , 'награда' : 1200 , 'умение' : 'четене' }]}Пример 7: С параметър индекс
Първо предаваме параметъра index, като го задаваме на „True“. Ще видите за всяка стойност на колона, че позицията на индекса се връща като ключ в речник.
Във втория изход се връщат само имената на колоните („колони“) и записите („данни“) без позициите на индекса, тъй като индексът е зададен на „False“.
# Конвертирайте в JSON с помощта на to_json() с index=Truejson_skills_data = skills_df.toPandas().to_json(index=True)
печат (json_skills_data, ' \н ' )
# Конвертирайте в JSON с помощта на to_json() с index=False
json_skills_data= skills_df.toPandas().to_json(index=False,orient= 'разделяне' )
печат (json_skills_data)
Изход:
{ 'документ за самоличност' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'човек' :{ '0' : 'Пчелен мед' , '1' : 'Муни' , '2' : 'Туласи' }, 'награда' :{ '0' : 25 000 , '1' : 2000 г , '2' : 1200 }, 'умение' :{ '0' : 'рисуване' , '1' : 'танц' , '2' : 'четене' }}{ 'колони' :[ 'документ за самоличност' , 'човек' , 'награда' , 'умение' ], 'данни' :[[ 123 , 'Пчелен мед' , 25 000 , 'рисуване' ],[ 112 , 'Муни' , 2000 г , 'танц' ],[ 153 , 'Туласи' , 1200 , 'четене' ]]
PySpark DataFrame към JSON с помощта на ToJSON()
Методът toJSON() се използва за преобразуване на PySpark DataFrame в JSON обект. По принцип той връща JSON низ, който е заобиколен от списък. The [‘{колона:стойност,…}’,…. ] е форматът, който се връща от тази функция. Тук всеки ред от PySpark DataFrame се връща като речник с името на колоната като ключ.
Синтаксис:
dataframe_object.toJSON()Възможно е да се подадат параметри като индекс, етикети на колони и тип данни.
Пример:
Създайте “skills_df” PySpark DataFrame с 5 реда и 4 колони. Преобразувайте този DataFrame в JSON с помощта на метода toJSON().
импортиране на pysparkот pyspark.sql импортирайте SparkSession
linuxhint_spark_app = SparkSession.builder.appName( „Linux Hint“ ).getOrCreate()
# данни за умения с 5 реда и 4 колони
умения =[{ 'документ за самоличност' : 123 , 'лице' : 'Пчелен мед' , 'умение' : 'живопис' , 'награда' : 25 000 },
{ 'документ за самоличност' : 112 , 'лице' : „Муни“ , 'умение' : 'музика/танц' , 'награда' : 2000 г },
{ 'документ за самоличност' : 153 , 'лице' : „Туласи“ , 'умение' : 'четене' , 'награда' : 1200 },
{ 'документ за самоличност' : 173 , 'лице' : 'избяга' , 'умение' : 'музика' , 'награда' : 2000 г },
{ 'документ за самоличност' : 43 , 'лице' : 'Камала' , 'умение' : 'четене' , 'награда' : 10 000 }
]
# създайте рамката с данни за умения от горните данни
skills_df = linuxhint_spark_app.createDataFrame(умения)
# Действителни данни за умения
skills_df.show()
# Конвертиране в JSON масив
json_skills_data = skills_df.toJSON().collect()
печат (json_skills_data)
Изход:
+---+------+-----+----------+| id|лице|награда| умение|
+---+------+-----+----------+
| 123 | Скъпа| 25 000 | рисуване|
| 112 | Муни| 2000 г |музика/танц|
| 153 |Туласи| 1200 | четене|
| 173 | Бяга| 2000 г | музика|
| 43 |Камала| 10 000 | четене|
+---+------+-----+----------+
[ '{'id':123,'person':'Honey','prize':25000,'skill':'painting'}' , '{'id':112,'person':'Mouni','prize':2000,'skill':'music/dance'}' , '{'id':153,'person':'Туласи','prize':1200,'skill':'reading'}' , '{'id':173,'person':'Ran','prize':2000,'skill':'music'}' , '{'id':43,'person':'Kamala','prize':10000,'skill':'reading'}' ]
Има 5 реда в PySpark DataFrame. Всички тези 5 реда се връщат като речник от низове, които са разделени със запетая.
PySpark DataFrame към JSON с помощта на Write.json()
Методът write.json() е наличен в PySpark, който записва/записва PySpark DataFrame в JSON файл. Той приема името/пътя на файла като параметър. По принцип той връща JSON в множество файлове (разделени файлове). За да обединим всички в един файл, можем да използваме метода coalesce().
Синтаксис:
dataframe_object.coalesce( 1 ).write.json('име_на_файл')- Режим на добавяне – dataframe_object.write.mode('append').json('file_name')
- Режим на презаписване – 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 импортирайте SparkSession
linuxhint_spark_app = SparkSession.builder.appName( „Linux Hint“ ).getOrCreate()
# данни за умения с 3 реда и 4 колони
умения =[{ 'документ за самоличност' : 123 , 'лице' : 'Пчелен мед' , 'умение' : 'живопис' , 'награда' : 25 000 },
{ 'документ за самоличност' : 112 , 'лице' : „Муни“ , 'умение' : 'танц' , 'награда' : 2000 г },
{ 'документ за самоличност' : 153 , 'лице' : „Туласи“ , 'умение' : 'четене' , 'награда' : 1200 }
]
# създайте рамката с данни за умения от горните данни
skills_df = linuxhint_spark_app.createDataFrame(умения)
# write.json()
skills_df.coalesce( 1 ).write.json( 'skills_data' )
JSON файл:
Можем да видим, че папката skills_data включва разделените JSON данни.
Нека отворим JSON файла. Виждаме, че всички редове от PySpark DataFrame са преобразувани в JSON.
Има 5 реда в PySpark DataFrame. Всички тези 5 реда се връщат като речник от низове, които са разделени със запетая.
Пример 2:
Създайте “skills2_df” PySpark DataFrame с един ред. Добавете един ред към предишния JSON файл, като посочите режима като „добавяне“.
импортиране на pysparkвносни панди
от pyspark.sql импортирайте SparkSession
linuxhint_spark_app = SparkSession.builder.appName( „Linux Hint“ ).getOrCreate()
умения2 =[{ 'документ за самоличност' : 78 , 'лице' : 'Дева Мария' , 'умение' : 'езда' , 'награда' : 8960 }
]
# създайте рамката с данни за умения от горните данни
skills2_df = linuxhint_spark_app.createDataFrame(skills2)
# write.json() с режим на добавяне.
skills2_df.write.mode( 'добавя' ).json( 'skills_data' )
JSON файл:
Можем да видим разделените JSON файлове. Първият файл съдържа първите записи на DataFrame, а вторият файл съдържа втория запис на DataFrame.
Заключение
Има три различни начина за конвертиране на PySpark DataFrame в JSON. Първо обсъдихме метода to_json(), който преобразува в JSON чрез преобразуване на PySpark DataFrame в Pandas DataFrame с различни примери, като отчита различни параметри. След това използвахме метода toJSON(). И накрая, научихме как да използваме функцията write.json(), за да напишем PySpark DataFrame в JSON. Добавянето и презаписването са възможни с тази функция.