Я пытаюсь прочитать файл 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