2017-09-24 4 views
0

Je ne comprends pas pourquoi la liste ne s'ajoute pas dans pyspark. Quelqu'un peut-il aider à regarder mon code?si autre instruction dans une boucle for à ajouter à une liste

import json 

input_file = sc.textFile("data.json") 

def extract_func(data): 
    c_list = [] 
    neighborhoods = data.get('neighborhoods', None) 

    for n in neighborhoods: 
     if n == []: 
      c_list.append('Unknown') 
     else: 
      c_list.append(n) 

    return c_list 

entrée de données Exemple:

{'attributes': {'Accepts Credit Cards': True, 
'city': 'Edinburgh', 
'name': 'Conan Doyle', 
'neighborhoods': [], 
'stars': 3.5, 
'state': 'EDH'}} 

Cet exemple d'entrée ne dispose pas d'un quartier montré, donc je veux ajouter « inconnu » à la liste. Certaines autres entrées de données ont plusieurs voisinages, donc je veux les ajouter individuellement par la boucle for.

Lorsque je cours dat = input_file.map(lambda line: json.loads(line)) suivi de dat = dat.flatMap(extract_func), il ne me donne pas les entrées de quartier Unknown.

En cours de vérification pendant des heures, ne peut pas comprendre ce qui ne va pas, qu'est-ce qui me manque ici?

+0

Pouvez-vous expliquer ce que vous entendez par « la liste n'ajoute pas »? Qu'est-ce qui est censé être ajouté à quoi? Vous appelez 'data.get()' mais les données ne sont pas définies. Qu'est-ce que 'data' est censé être? Quelle est la variable 'dat' à laquelle vous faites référence? – charlesreid1

+0

Si 'n' est en cours d'itération sur un dict, il sera réglé sur les touches du dict, pas sur les valeurs. –

+0

Dans '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' –

Répondre

1

if n == []: ne sera atteint et à évaluer si Trueneighborhoodscontient une liste vide, mais pas quand il est lui-même vide. Vous pouvez simplifier le code:

neighborhoods = data.get("neighborhoods") 
if neighborhoods: 
    c_list = ["Unknown" if n == [] else n for n in neighborhoods] 
else: 
    c_list = ["Unknown"] 

ou en utilisant une expression conditionnelle:

c_list = (["Unknown" if n == [] else n for n in neighborhoods] if neighborhoods 
      else ["Unknown"]) 
+1

Merci d'avoir signalé le problème de liste vide! C'est exactement là où j'étais coincé. –