Выбор и группировка словарных статей из json Dictionary RDD по ключу с использованием spark python - PullRequest
0 голосов
/ 15 октября 2018

Я использую spark, кодирование на python

У меня есть RDD с искровым содержимым, состоящий из объектов json, которые являются словарями.Я хотел бы выбрать и сгруппировать определенные пары ключ / значение из каждой записи (объект json) в СДР, сгруппировать их и затем собрать их.

Например: каждая запись в СДР содержит множество (ключ:пары значений), среди которых

the first entry contains:  'str_id' : 000000 ,'text' : "text here"
the second entry contains: 'str_id' : 000001 ,'text' : "new text"

...

Я хотел бы собрать значения 'str_id' и 'text' из каждой записи вместе в СДР, чтобы создать новыйСДР, содержащий следующие записи:

[(000000, «текст здесь»), (000001, «новый текст»), ...]

К сожалению, я не могу понять, как отобразить этипары ключ: значение, поскольку пары словарь ключ: значение находятся внутри каждой записи СДР.

Буду признателен за любую помощь в этом

Редактировать: Решено

Я хотел работать в системе RDD, потому что я работаю с большим количеством данных, поэтомуЯ не использовал .collect ().

rdd = sc.textFile(./json-data.txt)

rdd_entry = rdd.map(lambda x: jform(x) \
                .map(lambda y: val_get(y,"text","user"))

Где val_get () - это функция, которая возвращает словарные записи, объединенные в кортеж, а jform () преобразует строки в объекты json.

Я понял, что причина, по которой я получаю ошибки, заключается в том, что я не отфильтровываю RDD для свободных объектов, отличных от json, которые прошли первое сопоставление.У меня была оригинальная мысль, что отображение из словарной записи в RDD не будет работать, но я ошибся.

Спасибо

1 Ответ

0 голосов
/ 15 октября 2018

Мне не совсем понятен случай, но вы можете получить ожидаемый результат, используя что-то вроде ниже

>>> rdd = sc.parallelize([{'str_id':'000000' ,'text':'text here'},{'str_id':'000001' ,'text':'new text'}])
>>> rdd.collect()
[{'str_id': '000000', 'text': 'text here'}, {'str_id': '000001', 'text': 'new text'}]

>>> [tuple(k.values()) for k in rdd.collect()]
[('000000', 'text here'), ('000001', 'new text')]
...