Импорт текстового файла: нет столбцов для анализа из файла

Я пытаюсь получить информацию от sys.stdin. Это программа-редуктор карт для hadoop. Входной файл в текстовом виде. Предварительный просмотр набора данных:

196 242 3   881250949
186 302 3   891717742
22  377 1   878887116
244 51  2   880606923
166 346 1   886397596
298 474 4   884182806
115 265 2   881171488
253 465 5   891628467
305 451 3   886324817
6   86  3   883603013
62  257 2   879372434
286 1014    5   879781125
200 222 5   876042340
210 40  3   891035994
224 29  3   888104457
303 785 3   879485318
122 387 5   879270459
194 274 2   879539794
291 1042    4   874834944

Код, который я пытался -

import sys
df = pd.read_csv(sys.stdin,error_bad_lines=False)

Я также пытался с delimiter = \t, header=False,defining column nameНичто, кажется, не работает, ошибка, которую я получаю, является этой ошибкой:

[root@sandbox lab]# cat /root/lab/u.data | python /root/lab/mid-1-mapper.py |python /root/lab/mid-1-reducer.py
Traceback (most recent call last):
  File "/root/lab/mid-1-reducer.py", line 8, in <module>
    df = pd.read_csv(sys.stdin,delimiter='\t')
  File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 645, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 388, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 729, in __init__
    self._make_engine(self.engine)
  File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 922, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 1389, in __init__
    self._reader = _parser.TextReader(src, **kwds)
  File "pandas/parser.pyx", line 538, in pandas.parser.TextReader.__cinit__ (pandas/parser.c:5896)
pandas.io.common.EmptyDataError: No columns to parse from file

Тем не менее, если я попробую это прямо в Python(не в Hadoop), он работает нормально.

Я пытался заглянуть в сообщения stackru, один из постов предложил попробовать и за исключением. Применение этого оставляет меня с пустым файлом. Кто-нибудь может помочь? Спасибо

2 ответа

Решение

Использование try and only позволяет продолжить, несмотря на ошибки, и обрабатывать их. Это не поможет волшебным образом исправить ваши ошибки.

read_csv надеется csv файлы, которые вы вводите, очевидно, нет. Беглый взгляд на документацию:

delim_whitespace: логическое, по умолчанию False

Определяет, будет ли пробел (например, '' или '') использоваться в качестве sep. Эквивалентно установке sep = '+ s'. Если для этого параметра установлено значение True, для параметра delimiter ничего не следует передавать.

Это кажется правильным аргументом. использование

pandas.read_csv(filepath_or_buffer, delim_whitespace=True).

С помощью delimiter='\t' также должно работать, если вкладки не развернуты (заменены пробелами). Как мы не можем сказать, delim_whitespace кажется лучшим вариантом.

Если это не поможет, просто распечатайте sys.stdin чтобы проверить, правильно ли вы передали текст.

Редактировать: я только что видел, что вы используете

cat /root/lab/u.data | python /root/lab/mid-1-mapper.py |python /root/lab/mid-1-reducer.py

Это предназначено, таким образом mid-1-reducer.py обрабатывает вывод mid-1-mapper.py, Если вы хотите обработать содержимое файла u.data рассмотреть вопрос о чтении файла, а не sys.stdin,

Вы должны установить delim_whitespace True, чтобы использовать пробелы в качестве разделителя.

import sys
import pandas as pd

if __name__ == '__main__':
    df = pd.read_csv(sys.stdin, header=None, delim_whitespace=True)
    print df
Другие вопросы по тегам