Pyspark получить схему из файла JSON

1

Я пытаюсь получить схему Pyspark из файла JSON, но когда я создаю схему с использованием переменной в коде Python, я могу видеть тип переменной <class 'pyspark.sql.types.StructType'> но когда я Я пытаюсь получить через JSON файл, показывающий тип unicode.

Есть ли способ получить схему pyspark через JSON файл?

Содержимое файла JSON:

{                                                                                                                                                                                                
"tediasessionclose_schema" : "StructType([ StructField('@timestamp', StringType()), StructField('message' , StructType([ StructField('componentAddress', StringType()), StructField('values', StructType([ StructField('confNum', StringType()), StructField('day', IntegerType())])"                                                                                                                                                         
}

Код Pyspark:

df = sc.read.json(hdfs_path, schema = jsonfile['tediasessionclose_schema'])
  • 0
    tediasessionclose_schema = StructType ([StructField ('@ timestamp', StringType ()), StructField ('message', StructType ([StructField ('componentAddress', StringType ()) StructField ('values', StructType ([StructField) , StringType ())]))])), StructField ('day', IntegerType ())])
  • 0
    Да @ RameshMaharjan У меня есть несколько строк в файле JSON ... но для тестирования я позволил ему только одну.
Показать ещё 1 комментарий
Теги:
apache-spark
pyspark

2 ответа

1

файл config_json:

{"json_data_schema": ["contactId", "firstName", "lastName"]}

Приложение PySpark:

schema = StructType().add("contactId", StringType()).add("firstName", StringType()).add("lastName", StringType())

Ссылка: https://www.python-course.eu/lambda.php

schema = StructType()
schema = map(lambda x: schema.add(x, StringType(), True), (data["json_data_schema"]))[0][0:]

Надеюсь, что это решение работает для вас!

1

Вы можете получить схему, оценив строку, которую вы получаете от чтения json:

import json
from pyspark.sql.types import StructField, StringType, IntegerType, StructType

with open('test.json') as f:
    data = json.load(f)

df = sqlContext.createDataFrame([], schema = eval(data['tediasessionclose_schema']))
print(df.schema)

выходы:

StructType(List(StructField(@timestamp,StringType,true),StructField(message,StructType(List(StructField(componentAddress,StringType,true),StructField(values,StructType(List(StructField(confNum,StringType,true),StructField(day,IntegerType,true))),true))),true)))

где test.json:

{"tediasessionclose_schema" : "StructType([ StructField('@timestamp', StringType()), StructField('message' , StructType([ StructField('componentAddress', StringType()), StructField('values', StructType([ StructField('confNum', StringType()), StructField('day', IntegerType())]))]))])"}

Надеюсь это поможет!

  • 0
    Спасибо @Florian, Общая идея в том, что у меня уже есть схема, определенная в файле конфигурации json, и передача схемы из файла конфигурации json во время чтения данных и попыток сделать то же самое ... не работает для меня.
  • 0
    @SumitGupta Не уверены, что вы пытаетесь сказать? В ответе выше читается файл json со схемой в нем, и схема передается для создания Dataframe. Это также должно работать для чтения данных из hdfs. Почему не работает, с какой ошибкой вы сталкиваетесь? Разве это не только ваша схема JSON, которая искажена?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню