Преобразование PySpark DataFrame в JSON

Preobrazovanie 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, который преобразует DataFrame Pandas в JSON. Мы можем использовать этот метод, если преобразуем наш PySpark DataFrame в Pandas DataFrame. Чтобы преобразовать PySpark DataFrame в Pandas DataFrame, используется метод toPandas(). Давайте посмотрим на синтаксис to_json() вместе с его параметрами.



Синтаксис:





dataframe_object.toPandas().to_json(ориентация,индекс,...)
  1. Orient используется для отображения преобразованного JSON в желаемом формате. Он принимает «записи», «таблицу», «значения», «столбцы», «индекс», «разделение».
  2. Индекс используется для включения/удаления индекса из преобразованной строки JSON. Если установлено значение «True», отображаются индексы. В противном случае индексы не будут отображаться, если ориентация «разделена» или «таблица».

Пример 1: Ориентация как «Записи»

Создайте PySpark DataFrame «skills_df» с 3 строками и 4 столбцами. Преобразуйте этот DataFrame в JSON, указав параметр ориентации как «записи».

импортировать pyspark

импортировать панд

из pyspark.sql импортировать SparkSession

linuxhint_spark_app = SparkSession.builder.appName( «Подсказка по Линукс» ).getOrCreate()

# данные навыков с 3 строками и 4 столбцами

навыки =[{ 'идентификатор' : 123 , 'человек' : 'Мед' , 'навык' : 'рисование' , 'приз' : 25000 },

{ 'идентификатор' : 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)

Выход:



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

| идентификатор|человек|приз| умение|

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

| 123 | Мед| 25000 |живопись|

| 112 | Муни| 2000 г. | танец|

| 153 |Туласи| 1200 | чтение|

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

[{ 'идентификатор' : 123 , 'человек' : 'Мед' , 'приз' : 25000 , 'навык' : 'рисование' },{ 'идентификатор' : 112 , 'человек' : 'Муни' , 'приз' : 2000 г. , 'навык' : 'танец' },{ 'идентификатор' : 153 , 'человек' : 'Туласи' , 'приз' : 1200 , 'навык' : 'чтение' }]

Мы видим, что PySpark DataFrame преобразуется в массив JSON со словарем значений. Здесь ключи представляют имя столбца, а значение представляет значение строки/ячейки в PySpark DataFrame.

Пример 2: Ориентация как «Разделение»

Формат JSON, возвращаемый ориентацией «разделить», включает имена столбцов, которые содержат список столбцов, список индексов и список данных. Ниже приведен формат «разделенного» направления.

# Преобразовать в JSON, используя to_json() с ориентацией как 'разделить'

json_skills_data = skills_df.toPandas().to_json(ориентация= 'расколоть' )

печать (json_skills_data)

Выход:

{ 'столбцы' :[ 'идентификатор' , 'человек' , 'приз' , 'навык' ], 'индекс' :[ 0 , 1 , 2 ], 'данные' :[[ 123 , 'Мед' , 25000 , 'рисование' ],[ 112 , 'Муни' , 2000 г. , 'танец' ],[ 153 , 'Туласи' , 1200 , 'чтение' ]]}

Пример 3: Ориентация как «Индекс»

Здесь каждая строка из PySpark DataFrame удаляется в виде словаря с ключом в качестве имени столбца. Для каждого словаря позиция индекса указывается как ключ.

# Преобразование в JSON с помощью to_json() с ориентацией в качестве 'index'

json_skills_data = skills_df.toPandas().to_json(ориентация= 'индекс' )

печать (json_skills_data)

Выход:

{ '0' :{ 'идентификатор' : 123 , 'человек' : 'Мед' , 'приз' : 25000 , 'навык' : 'рисование' }, '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' : 25000 , '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 , 'Мед' , 25000 , 'рисование' ],[ 112 , 'Муни' , 2000 г. , 'танец' ],[ 153 , 'Туласи' , 1200 , 'чтение' ]]

Пример 6: Ориентация как «Таблица»

Ориентация «таблица» возвращает JSON, который включает схему с именами полей, а также типы данных столбцов, индекс в качестве первичного ключа и версию Pandas. Имена столбцов со значениями отображаются как «данные».

# Преобразование в JSON с помощью to_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: с индексным параметром

Сначала мы передаем параметр index, установив для него значение «True». Вы увидите, что для каждого значения столбца позиция индекса возвращается как ключ в словаре.

Во втором выводе возвращаются только имена столбцов («столбцы») и записи («данные») без позиций индекса, поскольку для индекса установлено значение «Ложь».

# Преобразование в JSON с помощью to_json() с index=True

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

печать (json_skills_data, ' \n ' )

# Преобразование в 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' : 25000 , '1' : 2000 г. , '2' : 1200 }, 'навык' :{ '0' : 'рисование' , '1' : 'танец' , '2' : 'чтение' }}

{ 'столбцы' :[ 'идентификатор' , 'человек' , 'приз' , 'навык' ], 'данные' :[[ 123 , 'Мед' , 25000 , 'рисование' ],[ 112 , 'Муни' , 2000 г. , 'танец' ],[ 153 , 'Туласи' , 1200 , 'чтение' ]]

PySpark DataFrame в JSON с использованием ToJSON()

Метод toJSON() используется для преобразования кадра данных PySpark в объект JSON. По сути, он возвращает строку JSON, окруженную списком. [‘{столбец:значение,…}’,…. ] формат, возвращаемый этой функцией. Здесь каждая строка из PySpark DataFrame возвращается в виде словаря с именем столбца в качестве ключа.

Синтаксис:

dataframe_object.toJSON()

Можно передать такие параметры, как индекс, метки столбцов и тип данных.

Пример:

Создайте PySpark DataFrame «skills_df» с 5 строками и 4 столбцами. Преобразуйте этот 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 }

]

# создаем кадр данных навыков из приведенных выше данных

skills_df = linuxhint_spark_app.createDataFrame(навыки)

# Фактические данные о навыках

skills_df.show()

# Преобразование в массив JSON

json_skills_data = skills_df.toJSON().collect()

печать (json_skills_data)

Выход:

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

| идентификатор|человек|приз| умение|

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

| 123 | Мед| 25000 | живопись|

| 112 | Муни| 2000 г. |музыка/танец|

| 153 |Туласи| 1200 | чтение|

| 173 | Ран| 2000 г. | музыка|

| 43 |Камала| 10000 | чтение|

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

[ '{'id':123,'person':'Дорогая','приз':25000,'навык':'живопись'}' , '{'id':112,'person':'Mouni','приз':2000,'skill':'музыка/танец'}' , '{'id':153,'человек':'Туласи','приз':1200,'навык':'чтение'}' , '{'id':173,'человек':'Ран','приз':2000,'навык':'музыка'}' , '{'id':43,'человек':'Камала','приз':10000,'навык':'чтение'}' ]

В PySpark DataFrame есть 5 строк. Все эти 5 строк возвращаются в виде словаря строк, разделенных запятой.

PySpark DataFrame в JSON с использованием Write.json()

В PySpark доступен метод write.json(), который записывает/сохраняет кадр данных PySpark в файл JSON. Он принимает имя файла/путь в качестве параметра. По сути, он возвращает JSON в нескольких файлах (файлах с разделами). Чтобы объединить их все в один файл, мы можем использовать методCoalesce().

Синтаксис:

dataframe_object.coalesce( 1 ).write.json('имя_файла')
  1. Режим добавления – dataframe_object.write.mode('добавить').json('имя_файла')
  2. Режим перезаписи – dataframe_object.write.mode('перезаписать').json('имя_файла')

Можно добавить/перезаписать существующий JSON. Используя write.mode(), мы можем добавить данные, передав «append», или перезаписать существующие данные JSON, передав «overwrite» этой функции.

Пример 1:

Создайте PySpark DataFrame «skills_df» с 3 строками и 4 столбцами. Запишите этот DataFrame в JSON.

импортировать pyspark

импортировать панд

из pyspark.sql импортировать SparkSession

linuxhint_spark_app = SparkSession.builder.appName( «Подсказка по Линукс» ).getOrCreate()

# данные навыков с 3 строками и 4 столбцами

навыки =[{ 'идентификатор' : 123 , 'человек' : 'Мед' , 'навык' : 'рисование' , 'приз' : 25000 },

{ 'идентификатор' : 112 , 'человек' : 'Муни' , 'навык' : 'танец' , 'приз' : 2000 г. },

{ 'идентификатор' : 153 , 'человек' : 'Туласи' , 'навык' : 'чтение' , 'приз' : 1200 }

]

# создаем кадр данных навыков из приведенных выше данных

skills_df = linuxhint_spark_app.createDataFrame(навыки)

# запись.json()

skills_df.coalesce( 1 ).написать.json( 'skills_data' )

JSON-файл:

Мы видим, что папка skills_data содержит секционированные данные JSON.

Давайте откроем файл JSON. Мы видим, что все строки из PySpark DataFrame конвертируются в JSON.

В PySpark DataFrame есть 5 строк. Все эти 5 строк возвращаются в виде словаря строк, разделенных запятой.

Пример 2:

Создайте кадр данных PySpark «skills2_df» с одной строкой. Добавьте одну строку к предыдущему файлу JSON, указав режим «добавить».

импортировать pyspark

импортировать панд

из pyspark.sql импортировать SparkSession

linuxhint_spark_app = SparkSession.builder.appName( «Подсказка по Линукс» ).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. С помощью этой функции возможно добавление и перезапись.