TypeError: индексы кортежа должны быть целыми числами, а не str с использованием pyspark и RDD - PullRequest
0 голосов
/ 18 мая 2018

Я новичок в Python.Я также новичок в pysaprk.Я пытаюсь запустить строку кода, которая принимает (kv [0], kv [1]), а затем запустить функцию ngrams () для kv [1].

Также приведен пример макета данных mentions, над которыми работает код:

Out[12]: 
[{'_id': u'en.wikipedia.org/wiki/Kamchatka_Peninsula',
  'source': 'en.wikipedia.org/wiki/Warthead_sculpin',
  'span': (100, 119),
  'text': u' It is native to the northern.'},
 {'_id': u'en.wikipedia.org/wiki/Warthead_sculpin',
  'source': 'en.wikipedia.org/wiki/Warthead_sculpin',
  'span': (4, 20),
  'text': u'The warthead sculpin ("Myoxocephalus niger").'}]

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

    def build(self, mentions, idfs):
            m = mentions\
                .map(lambda (source, target, span, text): (target, text))
                .flatMapValues(lambda v: ngrams(v, self.max_ngram))
                .map(lambda v: (v, 1))
                .reduceByKey(add)\

Как должны быть сформулированы данные из предыдущего шага для устранения этой ошибки ??Буду благодарен за любую помощь или руководство.

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

Спасибо,

1 Ответ

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

mapValues может применяться только к СДР из (key, value) пар (RDD, где каждый элемент равен tuple из length, равному 2, или некоторому объекту, который ведет себя как один - Какчтобы определить, является ли объект допустимой парой ключ-значение в PySpark )

Ваши данные являются словарем, поэтому они не соответствуют требованиям.Непонятно, чего вы там ожидаете, но вы подозреваете, что хотите:

from operator import itemgetter

(mentions
  .map(itemgetter("_id", "text"))
  .flatMapValues(lambda v: ngrams(v, self.max_ngram))
  .map(lambda v: (v, 1)))
...