UnicodeEncodeError при использовании spark-submit и BeautifulSoup - PullRequest
0 голосов
/ 05 марта 2019

Я получаю UnicodeEncodeError в Python 2.7, когда отправляю задание в spark 1.6, hadoop 2.7, но Я не получаю ту же ошибку, когда выполняю один и тот же код построчно в оболочке pyspark .

Я использую BeautifulSoup, чтобы получить все теги и получить текст из них, используя эту строку кода:

[r.text for r in BeautifulSoup(line).findAll('ref') if r.text]

Я пробовал следующеевещи:

  1. Установить export PYTHONIOENCODING="utf8"
  2. Использовать r.text.encode('ascii', 'ignore')
  3. Также пытались применить sysdefaultencoding('utf-8')

Не могли бы пожалуйстакто подскажет как это исправить?Ниже приведен стек ошибок:

"/hdata/dev/sdf1/hadoop/yarn/local/usercache/harshdee/appcache/application_1551632819863_0039/container_e36_1551632819863_0039_01_000004/pyspark.zip/pyspark/serializers.py", line 263, in dump_stream
    vs = list(itertools.islice(iterator, batch))
  File "/home/harshdee/get_data.py", line 63, in get_as_row
    return Row(citations=get_citations(line.content), id=line.id, title=line.title)
  File "/home/harshdee/get_data.py", line 47, in get_citations
    refs_in_line = [r.text for r in BeautifulSoup(line).findAll('ref') if r.text]
  File "/usr/lib/python2.7/site-packages/bs4/__init__.py", line 274, in __init__
    self._check_markup_is_url(markup)
  File "/usr/lib/python2.7/site-packages/bs4/__init__.py", line 336, in _check_markup_is_url
    ' that document to Beautiful Soup.' % decoded_markup
  File "/usr/lib64/python2.7/warnings.py", line 29, in _show_warning
    file.write(formatwarning(message, category, filename, lineno, line))
  File "/usr/lib64/python2.7/warnings.py", line 38, in formatwarning
    s =  "%s:%s: %s: %s\n" % (filename, lineno, category.__name__, message)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 21-28: ordinal not in range(128)```

1 Ответ

0 голосов
/ 27 марта 2019

Я решил проблему самостоятельно. Я думаю, что проблема была в представлении строки.

Для этого я использовал функцию repr, которая возвращает представление объекта. Другими словами, он в основном возвращает string, который закодирован равномерно.

Я применил это к переменной line.

...