Импорт текстового файла: нет столбцов для анализа из файла
Я пытаюсь получить информацию от 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