Pyspark получить схему из файла JSON - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь получить 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'])

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

config_json file:

{"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:]

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

0 голосов
/ 05 июля 2018

Вы можете получить схему, оценив строку, полученную при чтении 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())]))]))])"}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...