Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 导入文本文件:没有要从文件中解析的列_Python_Pandas_Hadoop Streaming - Fatal编程技术网

Python 导入文本文件:没有要从文件中解析的列

Python 导入文本文件:没有要从文件中解析的列,python,pandas,hadoop-streaming,Python,Pandas,Hadoop Streaming,我正在尝试从sys.stdin获取输入。这是一个用于hadoop的MapReducer程序。输入文件为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

我正在尝试从sys.stdin获取输入。这是一个用于hadoop的MapReducer程序。输入文件为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,定义列名
似乎什么都不起作用,我得到的错误是:

[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
[root@sandboxlab]#cat/root/lab/u.data | python/root/lab/mid-1-mapper.py | python/root/lab/mid-1-reducer.py
回溯(最近一次呼叫最后一次):
文件“/root/lab/mid-1-reducer.py”,第8行,在
df=pd.read\u csv(sys.stdin,分隔符='\t')
文件“/opt/rh/python27/root/usr/lib64/python2.7/site packages/pandas/io/parsers.py”,第645行,在解析器中
返回读取(文件路径或缓冲区,kwds)
文件“/opt/rh/python27/root/usr/lib64/python2.7/site packages/pandas/io/parsers.py”,第388行,已读
parser=TextFileReader(文件路径或缓冲区,**kwds)
文件“/opt/rh/python27/root/usr/lib64/python2.7/site packages/pandas/io/parsers.py”,第729行,在__
自制发动机(自制发动机)
文件“/opt/rh/python27/root/usr/lib64/python2.7/site packages/pandas/io/parsers.py”,第922行,在“make”引擎中
self.\u engine=CParserWrapper(self.f,**self.options)
文件“/opt/rh/python27/root/usr/lib64/python2.7/site packages/pandas/io/parsers.py”,第1389行,在__
self.\u reader=\u parser.textleader(src,**kwds)
文件“pandas/parser.pyx”,第538行,位于pandas.parser.TextReader.\u u cinit__;(pandas/parser.c:5896)
pandas.io.common.EmptyDataError:没有要从文件中分析的列
但是,如果我直接在python中(而不是在hadoop中)尝试这一点,它可以正常工作

我曾尝试查看stackoverflow帖子,其中一篇帖子建议尝试并排除。应用它会给我留下一个空文件。
有人能帮忙吗?感谢使用try and except,它只允许您在出现错误时继续并处理错误。它不会神奇地修复你的错误

read\u csv
需要
csv
文件,而您的输入显然不是。快速查看文档:

delim_空格:布尔值,默认为False

指定是否将空格(例如“或”)用作sep。相当于设置sep='+s'。如果此选项设置为True,则不应为delimiter参数传入任何内容

这似乎是正确的论点。使用

pandas.read_csv(filepath_or_buffer, delim_whitespace=True).
使用
delimiter='\t'
也应该有效,除非选项卡被展开(替换为空格)。我们真的不知道,
delim_空白
似乎是更好的选择

如果这没有帮助,只需打印出
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 < /COD> .< /P> < P>您必须将代码> DELIMIWHESTESPACTION/COD>设置为真,使用空白作为分隔符。
import sys
import pandas as pd

if __name__ == '__main__':
    df = pd.read_csv(sys.stdin, header=None, delim_whitespace=True)
    print df

import sys import pandas as pd如果name='main':df=pd.read_csv(sys.stdin,header=None,delim_whitespace=True)print df你能从python脚本中打印出你的
sys.stdin
mid-1-reducer.py
才是关键)?您可以简单地使用
readlines
函数或类似的功能。它的输出是否与您在问题中打印的输入相同?我将映射器更改为pd import sys df=pd。read_csv(sys.stdin,delim_whitespace=True)print df,并且使用相同的减速机,它现在似乎可以工作。以前它只是print stdline。