2016-09-01 4 views
3

Я пишу утилиту искры python для чтения файлов и выполнения некоторых преобразований. Файл имеет большой объем данных (до 12 ГБ). Я использую sc.textFile для создания RDD, а логика - передавать каждую строку из RDD в функцию карты, которая в свою очередь разделяет строку на «,» и запускает некоторое преобразование данных (изменение значения полей на основе сопоставления).PySpark как читать файл с строкой с несколькими кодировками

Пример строки из файла. 0014164,02,031270,09,1,, 0,0,0000000000,134314, Мобильный, ce87862158eb0dff3023e16850f0417a-cs31,584e2cd63057b7ed, Privé, Сплетни

Благодаря ценностям "Privé" Я получаю UnicodeDecodeError. Я попытался следующие действия, чтобы разобрать это значение:

if isinstance(v[12],basestring): 
      v[12] = v[12].encode('utf8') 
     else: 
      v[12] = unicode(v[12]).encode('utf8') 

, но когда я пишу данные обратно в файл это поле переводится как «Priv�». по типу исходного файла Linux отображается как «Текст ISO-8859 с очень длинными строками с терминаторами линии CRLF».

Может ли кто-нибудь сообщить мне правильный путь в Spark, чтобы читать/писать файлы со смешанным кодированием, пожалуйста.

ответ

0

Вы можете установить use_unicode в адрес False при звонке по телефону textFile. Он даст вам RDD str объектов (Python 2.x) или bytes объектов (Python 3.x), которые могут обрабатываться с использованием нужной кодировки.

sc.textFile(path, use_unicode=False).map(lambda x: x.decode("iso-8859-1")) 
+0

Hi zero323, спасибо за быстрый ответ. Я попытался, но когда я пишу в файл, я вижу значение как «Priv�», – Harish

+0

Кодировка может быть разной в вашем случае. 'Iso-8859-1' - просто пример. – zero323

Смежные вопросы