подмножество объекта JSON и формирования (ключ, значение) RDD из этого - PullRequest
0 голосов
/ 20 июня 2019

Предположим, у меня есть объект JSON:

obj= [{"name":"Era", "age":45, "sex":"female", "id":2545}  
     {"name":"Patrick", "age":35, "sex":"male", "id":2546}  
     {"name":"Elina", "age":40, "sex":"female", "id":2547}  
     {"name":"Reg", "age":47, "sex":"male", "id":2548}]   

Я хочу создать (ключ, значение) СДР из этих данных, используя только «id» и «name» («id» - это ключ в RDD). Я пробовал решение, указанное в этой ссылке , но получаю следующую ошибку:

AttributeError: у объекта 'str' нет атрибута 'get'

Чтобы объяснить больше, вот мой код-

for key in obj:
    my_dict={}
    my_dict['id']=key.get('id')
    my_dict['name']=key.get('name')
    result.append(my_dict)  

Я надеюсь получить какую-либо помощь для этой части, чтобы я мог перейти ко второй части, то есть сделать из нее rdd.

Ответы [ 3 ]

1 голос
/ 20 июня 2019

У меня работает, когда я исправляю JSON в obj:

In [4]: obj= [{"name":"Era", "age":45, "sex":"female", "id":2545},
   ...:      {"name":"Patrick", "age":35, "sex":"male", "id":2546},
   ...:      {"name":"Elina", "age":40, "sex":"female", "id":2547},
   ...:      {"name":"Reg", "age":47, "sex":"male", "id":2548}]

In [6]: result = []

In [7]: for key in obj:
   ...:     my_dict={}
   ...:     my_dict['id']=key.get('id')
   ...:     my_dict['name']=key.get('name')
   ...:     result.append(my_dict)
   ...:

In [8]: result
Out[8]:
[{'id': 2545, 'name': 'Era'},
 {'id': 2546, 'name': 'Patrick'},
 {'id': 2547, 'name': 'Elina'},
 {'id': 2548, 'name': 'Reg'}]
1 голос
/ 20 июня 2019

Вы можете написать это в одну строку, это должно работать, если ваш obj правильный

result = [{'id': item.get('id'), 'name': item.get('name')} for item in obj]

Я проверил ваш код в моем собственном env, единственная проблема, которую я получаюв том, что в obj нужно добавлять запятые между dicts

0 голосов
/ 20 июня 2019

Попробуйте, если вам нужен простой словарь с ключевыми значениями:

obj= [{"name":"Era", "age":45, "sex":"female", "id":2545},  
     {"name":"Patrick", "age":35, "sex":"male", "id":2546},  
     {"name":"Elina", "age":40, "sex":"female", "id":2547},  
     {"name":"Reg", "age":47, "sex":"male", "id":2548}] 

my_dict = {}
for i in obj:
    my_dict[i.get('id')] = i.get('name')

print(my_dict)

# Output: {2545: 'Era', 2546: 'Patrick', 2547: 'Elina', 2548: 'Reg'}
...