-1
votes

Pyspark - Obtenez des noms d'attributs du fichier JSON

Je suis nouveau à Pyspark. Mon exigence est d'obtenir / extraire les noms d'attribut à partir d'un fichier JSON imbriqué. J'ai essayé d'utiliser Json_Normalize importé de Pandas Package. Cela fonctionne pour les attributs directs mais ne récupère jamais les attributs des attributs de tableau JSON. Mon Json n'a pas de structure statique. Il varie pour chaque document que nous recevons. Quelqu'un pourrait-il m'aider s'il vous plaît avec explication du petit exemple fourni ci-dessous, xxx

surtout pour les éléments de matrice JSON ..

Sortie attendue: identifiant Nom Salaires.Salary états.state états.city.city``


0 commentaires

3 Réponses :


0
votes

Si vous traitez le JSON comme un dictionnaire Python, cela devrait fonctionner.

Je viens d'écrire un programme de récursoir simple. P>

Script PRET>

import json

def js_r(filename):
    with open(filename) as f_in:
        return(json.load(f_in))

g = js_r("city.json")
answer_d = {}
def base_line(g, answer_d):
    for key in g.keys():
        answer_d[key] = {}
    return answer_d

answer_d = base_line(g, answer_d)
def recurser_func(g, answer_d):
    for k in g.keys():
        if type(g[k]) == type([]): #If the value is a list
            answer_d[k] = {list(g[k][0].keys())[0]:{}}

        if type(g[k]) == type({}): #If the value is a dictionary
            answer_d[k] = {list(g[k].keys())[0]: {}} #set key equal to 
            answer_d[k] = recurser_func(g[k], answer_d[k])
    return answer_d
recurser_func(g,answer_d)


def printer_func(answer_d, list_to_print, parent):
    for k in answer_d.keys():
        if len(answer_d[k].keys()) == 1:
            list_to_print.append(parent)
            list_to_print[-1] += k
            list_to_print[-1] += "." + str(list(answer_d[k].keys())[0])
        if len(answer_d[k].keys()) == 0:
            list_to_print.append(parent)
            list_to_print[-1] += k
        if len(answer_d[k].keys()) > 1:
            printer_func(answer_d[k], list_to_print, k + ".")
    return list_to_print



l = printer_func(answer_d, [], "")
final = " ".join(l)
print(final)


1 commentaires

Merci pour l'explication. Si je stocke le même contenu JSON dans un fichier (comme .json), je reçois l'erreur ci-dessous, la réponse_d [k] = {Liste (g [k] [0] .Keys ()) [0]: {}} attribututeError : 'str' objet n'a pas d'attribut 'Keys'. Je trouve un peu difficile de comprendre le code ici. La raison de la vérification de la liste est de trouver le tableau JSON ?? .. Merci encore pour votre aide !!



1
votes

Voici la solution d'autre pour extraire tous les attributs imbriqués de JSON

My Python version: 2.7 


0 commentaires

1
votes

Vous pouvez également faire de cette façon.

.states.state
.states.cities.city
.states.cities.city
.id
.salaries.salary
.salaries.salary
.name


0 commentaires