Как правильно сгруппироватьByKey для непарных парных дисков, используя pyspark - PullRequest
0 голосов
/ 19 мая 2018

Я новичок в Python.Я также новичок в pysaprk.Я пытаюсь запустить код, который принимает кортеж, который выглядит как (id , (span, mention)) для выполнения .map(lambda (id, (span, text)): (id, text)).

Код, с которым я работаю:

 m = text\
            .map(lambda (id, (span, text)): (id, text))\
            .mapValues(lambda v: ngrams(v, self.max_ngram))\'''error triggered here'''
            .flatMap(lambda (target, tokens): (((target, t), 1) for t in tokens))\

Вот как форматируются исходные данные (id, source, span, text):

 {'_id': u'en.wikipedia.org/wiki/Cerambycidae',
  'source': 'en.wikipedia.org/wiki/Plinthocoelium_virens',
  'span': (61, 73),
  'text': u'"Plinthocoelium virens" is a species of beetle in the family Cerambycidae.'},
 {'_id': u'en.wikipedia.org/wiki/Dru_Drury',
  'source': 'en.wikipedia.org/wiki/Plinthocoelium_virens',
  'span': (20, 29),
  'text': u'It was described by Dru Drury in 1770.'}]

Я получаю эту ошибку:

 for k, v in iterator:
TypeError: tuple indices must be integers, not str

Я знаю, что groupByKey работает с pairwiseRDD, поэтому я хотел бы знать, какправильно выполнить groupByKey для решения этой проблемы?

Любая помощь или руководство будут по-настоящему оценены.

Я использую Python 2.7 и pyspark 2.3.0.

Спасибо завперед.

1 Ответ

0 голосов
/ 19 мая 2018

Сначала необходимо отобразить данные в форму, которая имеет ключ и значение, а затем groupByKey .

Форма ключа и значения всегда является кортежем (a, b) сключом является а и значение б.a и b могут быть самими кортежами.

rdd = sc.parallelize([{'_id': u'en.wikipedia.org/wiki/Cerambycidae',
  'source': 'en.wikipedia.org/wiki/Plinthocoelium_virens',
  'span': (61, 73),
  'text': u'"Plinthocoelium virens" is a species of beetle in the family Cerambycidae.'},
 {'_id': u'en.wikipedia.org/wiki/Dru_Drury',
  'source': 'en.wikipedia.org/wiki/Plinthocoelium_virens',
  'span': (20, 29),
  'text': u'It was described by Dru Drury in 1770.'},
 {'_id': u'en.wikipedia.org/wiki/Dru_Drury',
  'source': 'en.wikipedia.org/wiki/Plinthocoelium_virens2',
  'span': (20, 29, 2),
  'text': u'It was described by Dru Drury in 1770.2'}])

print rdd.map(lambda x: (x["_id"], (x["span"], x["text"]))).groupByKey()\
.map(lambda x: (x[0], list(x[1]))).collect() 

[(u'en.wikipedia.org / wiki / Dru_Drury ', [((20, 29), u'It был описан DruДрури в 1770 году. '), ((20, 29, 2), вы были описаны Дру Друри в 1770.2')]), (u'en.wikipedia.org / wiki / Cerambycidae ', [((61,73), '' Plinthocoelium virens "является видом жука в семействе Cerambycidae. ')])]

...