Python Pyspark: ошибка суммирования lowerByKey - PullRequest
0 голосов
/ 21 октября 2019

Я создал список кортежей в моих данных, который выглядит примерно так:

rdd.take(10)
[(u'AK', 224), (u'AK', 696), (u'AK', 278), (u'AK', 187), (u'AK', 842), (u'AK', 589), (u'AK', 253), (u'AK', 974), (u'AK', 37), (u'AK', 132)]

С этими данными я хочу использовать функции mapValues и reduceByKey, чтобы по существу добавить все мои данныедля АК вместе. Я понимаю, что это все в юникоде, поэтому я могу преобразовать свои данные, выполнив что-то вроде этого:

states = rdd.mapValues(lambda x: int(x))
states.take(10)
[(u'AK', 224), (u'AK', 696), (u'AK', 278), (u'AK', 187), (u'AK', 842), (u'AK', 589), (u'AK', 253), (u'AK', 974), (u'AK', 37), (u'AK', 132)]

Однако, я продолжаю получать ошибку, когда пытаюсь реализовать свою функцию reducebyKey. Что:

states = states.reduceByKey(lambda x, y: (x+y)).collect()

Я получаю сообщение об ошибке:

  File "<stdin>", line 1, in <lambda>
ValueError: invalid literal for int() with base 10: '1,643'

Может кто-нибудь сказать мне, что происходит, и оказать помощь, пожалуйста? : (

ОБНОВЛЕНИЕ:

Итак, я выяснил, что некоторые значения ключей в моем списке кортежей будут иметь значение, например, «1529». Мне нужно удалить запятую, чтобыпреобразовать это в int. Сейчас я просто пытаюсь найти хороший метод для этого. Есть ли способ, которым я могу использовать .replace (",", "") в функции отображения, чтобы избавиться от него?

1 Ответ

0 голосов
/ 21 октября 2019

Я бы попытался добавить его в функцию mapvalues: lambda x: int(x.replace(…)).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...