Я только начинаю со Spark.Пытаюсь подсчитать количество упоминаний для каждого токена в твитах.Для этого я создал пару rdd с user_id и твитами, сгруппированными по каждому user_id (поэтому у меня есть user в качестве ключа и tweets в качестве каждого пользователя в качестве кортежа для значений).Применили функцию токенизации к твитам и удалили дубликаты токенов для каждого пользователя.Затем я сопоставил каждый токен с 1 и уменьшил его по ключу.Ниже приведен код:
user_tweets.mapValues(lambda x: list(tok.tokenize(x))).mapValues(set).flatMap(lambda x: ((i, 1) for i in x[1])).reduceByKey(lambda a,b: a+b)
Я замечаю, что когда я токенизирую твиты, '(' и ')' для кортежей создаются как отдельные токены.
Оригинальный твит:
('14241527', ('RT @BernieSanders: «Я непременно посмотрю на это». - @HillaryClinton> \ n \ nГолосовать заслуживают того, чтобы узнать, что она рассказала Уолл-стрит и Большой фарма, вот… », 'RT @CamaraNjeri: Берни ❤️.))
Токенизированный твит:
(' 14241527 ', [' (', "'", 'rt','@berniesanders', ':',
'' ',' i ',' will ',' безусловно ',' look ',' into ',' it ','. ',' "',' -',' @hillaryclinton ',' \ ',' n ',' \ ',
' nvoters ',' заслуживают ',' to ',' знать ',' что ',' она ',
'said ',' wall ',' street ',' and ',' big ',' pharma ',
' beh ','… ',' '', ',', '' ',' rt ','@camaranjeri',
':', 'bernie', '❤', '️', '.',
')'])
Я понимаю, что ток.tokenize (x) получает кортеж как и анализирует все выражение, включая скобки и запятую, которые я пытаюсь избежать.Я пытался
user_tweets.mapValues(lambda x: list(tok.tokenize(i) for i in x)))
, но получаю следующую ошибку:
Can't pickle local object 'Tokenizer.tokenize.<locals>.<lambda>'
Как это исправить, пожалуйста?