Тема содержания:
- 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, который преобразует DataFrame Pandas в JSON. Мы можем использовать этот метод, если преобразуем наш PySpark DataFrame в Pandas DataFrame. Чтобы преобразовать PySpark DataFrame в Pandas DataFrame, используется метод toPandas(). Давайте посмотрим на синтаксис to_json() вместе с его параметрами.
Синтаксис:
dataframe_object.toPandas().to_json(ориентация,индекс,...)
- Orient используется для отображения преобразованного JSON в желаемом формате. Он принимает «записи», «таблицу», «значения», «столбцы», «индекс», «разделение».
- Индекс используется для включения/удаления индекса из преобразованной строки 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=Truejson_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('имя_файла')- Режим добавления – dataframe_object.write.mode('добавить').json('имя_файла')
- Режим перезаписи – 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. С помощью этой функции возможно добавление и перезапись.