Python 从hdfs读取csv文件作为数据帧

Python 从hdfs读取csv文件作为数据帧,python,hadoop,pandas,hdfs,Python,Hadoop,Pandas,Hdfs,我正在使用pydoop从hdfs读取文件,当我使用: import pydoop.hdfs as hd with hd.open("/home/file.csv") as f: print f.read() 它向我显示了stdout中的文件 我有没有办法把这个文件读作数据帧?我尝试过使用pandas的read_csv(“/home/file.csv”),但它告诉我找不到该文件。准确的代码和错误为: >>> import pandas as pd >>>

我正在使用pydoop从hdfs读取文件,当我使用:

import pydoop.hdfs as hd
with hd.open("/home/file.csv") as f:
    print f.read()
它向我显示了stdout中的文件

我有没有办法把这个文件读作数据帧?我尝试过使用pandas的read_csv(“/home/file.csv”),但它告诉我找不到该文件。准确的代码和错误为:

>>> import pandas as pd
>>> pd.read_csv("/home/file.csv")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 498, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 275, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 590, in __init__
    self._make_engine(self.engine)
  File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 731, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 1103, in __init__
    self._reader = _parser.TextReader(src, **kwds)
  File "pandas/parser.pyx", line 353, in pandas.parser.TextReader.__cinit__ (pandas/parser.c:3246)
  File "pandas/parser.pyx", line 591, in pandas.parser.TextReader._setup_parser_source (pandas/parser.c:6111)
IOError: File /home/file.csv does not exist
>>将熊猫作为pd导入
>>>pd.read\u csv(“/home/file.csv”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
parser\u f中的文件“/usr/lib64/python2.7/site packages/pandas/io/parsers.py”,第498行
返回读取(文件路径或缓冲区,kwds)
文件“/usr/lib64/python2.7/site packages/pandas/io/parsers.py”,第275行,已读
parser=TextFileReader(文件路径或缓冲区,**kwds)
文件“/usr/lib64/python2.7/site packages/pandas/io/parsers.py”,第590行,在__
自制发动机(自制发动机)
文件“/usr/lib64/python2.7/site packages/pandas/io/parsers.py”,第731行,在“make”引擎中
self.\u engine=CParserWrapper(self.f,**self.options)
文件“/usr/lib64/python2.7/site packages/pandas/io/parsers.py”,第1103行,在__
self.\u reader=\u parser.textleader(src,**kwds)
文件“pandas/parser.pyx”,第353行,在pandas.parser.TextReader.\u u cinit\uu_;(pandas/parser.c:3246)中
文件“pandas/parser.pyx”,第591行,位于pandas.parser.TextReader.\u设置\u parser\u源(pandas/parser.c:6111)中
IOError:File/home/File.csv不存在

我对
hdfs
几乎一无所知,但我想知道以下方法是否可行:

with hd.open("/home/file.csv") as f:
    df =  pd.read_csv(f)
我假设
read\u csv
与一个文件句柄一起工作,或者实际上是任何一个可以为其提供行的iterable。我知道
numpy
csv阅读器的功能

pd.read\u csv(“/home/file.csv”)
如果常规Python文件
open
工作,则该文件将工作-即,它将文件读取为常规本地文件

with open("/home/file.csv") as f: 
    print f.read()

但是显然,
hd.open
正在使用其他位置或协议,因此文件不是本地文件。如果我的建议不起作用,那么您(或我们)需要深入研究
hdfs
文档。

使用
read
,而不是
open
,它会起作用

以hd.read(“/home/file.csv”)作为f的
:
df=pd.read\u csv(f)

您可以使用以下代码从hdfs读取csv

import pandas as pd
import pyarrow as pa
hdfs_config = {
     "host" : "XXX.XXX.XXX.XXX",
     "port" : 8020,
     "user" : "user"
}
fs = pa.hdfs.connect(hdfs_config['host'], hdfs_config['port'], 
user=hdfs_config['user'])
df=pd.read_csv(fs.open("/home/file.csv"))