Как прочитать файл tsv в MRJob, когда некоторые записи имеют "\ n" внутри? - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь прочитать файл tsv в картограф MRJob.

class MRJobJoin(MRJob):

def mapper(self,_,line):
    data = line.split("\t")
    if len(data) == 5: # making sure we are skipping lines if doesnt have 5 tabs
        user, reputation, gold, silver, bronze = data # unpacking the data
        yield user, ("U", reputation, gold, silver, bronze)  

В результате пропускается много строк, поскольку некоторые из входов имеют \ n внутри.Например, запись может выглядеть так:

пользователь \ t репутация \ t золото \ t серебро \ t бронза

Майк \ t он хорошо известен своей скоростью.

такжеон хорошо известен своей стойкостью.\ t 12 \ t 10 \ t 5

В результате получается, что эта новая строка читается как новая запись (и обе строки будут пропущены, поскольку ни одна из них не имеет длины 5).Когда я открываю файл tsv в excel, он знает, что это не новая строка, а только возврат внутри той же ячейки.Как я могу прочитать такой файл, используя MRJob?

РЕДАКТИРОВАТЬ:

Я нашел ответ.Там должен быть более элегантный способ, хотя.Конец строки в tsv распознается \ r \ n, а конец строки в ячейках содержимого распознается с помощью \ n.Я использовал команду perl в командной строке для преобразования \ ns, у которых нет \ r перед ними, в new_line

perl -pi -e 's/(?<!\r)\n/new_line/g' data.tsv

...