Конвертиране на PySpark DataFrame в JSON

Konvertirane Na Pyspark Dataframe V Json



Предаването на структурирани данни с помощта на JSON е възможно и също така консумира малко памет. В сравнение с PySpark RDD или PySpark DataFrame, JSON консумира малко памет и сериализация, което е възможно с JSON. Ние можем да конвертираме PySpark DataFrame в JSON с помощта на метода pyspark.sql.DataFrameWriter.json(). Освен него, има два други начина за конвертиране на DataFrame в 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(ориент,индекс,...)
  1. Orient се използва за показване на конвертирания JSON като желания формат. Той приема „записи“, „таблица“, „стойности“, „колони“, „индекс“, „разделяне“.
  2. Индексът се използва за включване/премахване на индекса от преобразувания 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=True

json_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('име_на_файл')
  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 импортирайте 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. Добавянето и презаписването са възможни с тази функция.