Pyspark: obtenga los nombres de los atributos del archivo json

usuario3054835

Soy nuevo en pyspark. Mi requisito es obtener / extraer los nombres de los atributos de un archivo json anidado. Intenté usar json_normalize importado del paquete pandas. Funciona para atributos directos pero nunca recupera los atributos dentro de los atributos de la matriz json. Mi json no tiene una estructura estática. Varía para cada documento que recibimos. ¿Podría alguien ayudarme con una explicación del pequeño ejemplo que se proporciona a continuación?

        {  
               "id":"1",
               "name":"a",
               "salaries":[  
                  {  
                     "salary":"1000"
                  },
                  {  
                     "salary":"5000"
                  }
               ],
               "states":{  
                  "state":"Karnataka",
                  "cities":[  
                     {  
                        "city":"Bangalore"
                     },
                     {  
                        "city":"Mysore"
                     }
                  ],
                  "state":"Tamil Nadu",
                  "cities":[  
                     {  
                        "city":"Chennai"
                     },
                     {  
                        "city":"Coimbatore"
                     }
                  ]
               }
            }  

Especialmente para los elementos de la matriz json.

Salida esperada: id name salaries.salary states.state states.cities.city ''

Thirupathi Chavati

Aquí está la otra solución para extraer todos los atributos anidados de json

import json

result_set = set([])


def parse_json_array(json_obj, parent_path):
    array_obj = list(json_obj)
    for i in range(0, len(array_obj)):
        json_ob = array_obj[i]
        if type(json_obj) == type(json_obj):
            parse_json(json_ob, parent_path)
    return None


def parse_json(json_obj, parent_path):
    for key in json_obj.keys():
        key_value = json_obj.get(key)
        # if isinstance(a, dict):
        if type(key_value) == type(json_obj):
            parse_json(key_value, str(key) if parent_path == "" else parent_path + "." + str(key))
        elif type(key_value) == type(list(json_obj)):
            parse_json_array(key_value, str(key) if parent_path == "" else parent_path + "." + str(key))
        result_set.add((parent_path + "." + key).encode('ascii', 'ignore'))
    return None



file_name = "C:/input/sample.json"
file_data = open(file_name, "r")
json_data = json.load(file_data)
print json_data

parse_json(json_data, "")
print list(result_set)

Producción:

{u'states': {u'state': u'Tamil Nadu', u'cities': [{u'city': u'Chennai'}, {u'city': u'Coimbatore'}]}, u'id': u'1', u'salaries': [{u'salary': u'1000'}, {u'salary': u'5000'}], u'name': u'a'}
['states.cities.city', 'states.cities', '.id', 'states.state', 'salaries.salary', '.salaries', '.states', '.name']

Nota:

My Python version: 2.7 

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Obtenga todos los nombres de archivo del archivo PHP en Android

Obtenga todos los nombres de clase de ciertos atributos CSS

Obtenga todos los nombres de archivo del directorio a través de un script PHP

Linq a Excel, obtenga los nombres de las columnas del archivo CSV

Obtenga detalles de los atributos del producto en WooCommerce 3

Obtenga todos los nombres de clase dentro de los atributos de clase

Listar todos los nombres de atributos del producto WooCommerce

Obtenga la descripción de los términos de los atributos de las variaciones del producto

Python: obtenga todos los valores de una clave específica del archivo json

Obtenga todos los nombres de clave JSON únicos con JQ

¿Hay alguna forma de "estandarizar" los nombres de columna del archivo json?

Obtenga todos los nombres de atributos de la entidad Core Data; Rápido

Obtenga todos los nombres de atributos de una clase en C #

Obtenga los atributos de JsonSlurper con groovy

Carga de archivos Django (obtenga los DATOS del archivo, no solo la ruta del archivo)

Obtenga y actualice el valor del cuadro de texto de los atributos de URL en Bokeh

Elimine todos los atributos del archivo de flujo excepto los definidos explícitamente

Elimine todos los atributos del archivo de flujo excepto los definidos explícitamente

PySpark: cambie el nombre de los nombres de clave en JSON almacenados como columna de cadena en el archivo CSV

PySpark: cambie el nombre de los nombres de clave en JSON almacenados como columna de cadena en el archivo CSV

Obtenga los nombres de host Ansible

Divida los datos JSON y solo obtenga los nombres de las variables

Obtenga los nombres de las columnas en un archivo de Excel usando Apache POI

SQLite: obtenga los archivos sin extensión de una columna que contenga nombres de archivo

Obtenga todos los nombres de las hojas en un archivo de Excel en orden

Obtenga los atributos de la entrada del método usando la anotación AspectJ

Obtenga todos los nombres de archivo en un directorio usando vim

Leer solo los nombres de los usuarios del archivo txt [C ++]

Los nombres de columna del archivo xlsx no se conservan en los csvs convertidos