[英]Importing text file : No Columns to parse from file
我正在嘗試從 sys.stdin 獲取輸入。 這是hadoop的map減速器程序,輸入文件為txt格式。 數據集預覽:
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 中)嘗試這個,它工作正常。
我試圖查看 stackoverflow 帖子,其中一篇帖子建議嘗試並排除。 應用它給我留下一個空文件。 有人可以幫忙嗎? 謝謝
使用try和except只是讓你繼續盡管有錯誤並處理它們。 它不會神奇地修復你的錯誤。
read_csv
需要csv
文件,你的輸入顯然不是。 快速瀏覽一下文檔:
delim_whitespace:布爾值,默認為False
指定是否將空格(例如''或'')用作sep。 相當於設置sep ='+ s'。 如果此選項設置為True,則不應為delimiter參數傳遞任何內容。
這似乎是正確的論點。 采用
pandas.read_csv(filepath_or_buffer, delim_whitespace=True).
除非標簽被展開(用空格替換),否則使用delimiter='\\t'
也應該有效。 我們無法delim_whitespace
, 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.