从hdfs读取csv文件作为Dataframe

p8h8hvxi  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(558)

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

import pydoop.hdfs as hd
with hd.open("/home/file.csv") as f:
    print f.read()

它显示了stdout中的文件。
有什么方法可以让我把这个文件读作Dataframe吗?我试过使用pandas的read\u 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
pkbketx9

pkbketx91#

使用 read 相反 open ,它起作用了

with hd.read("/home/file.csv") as f:
    df =  pd.read_csv(f)
jk9hmnmh

jk9hmnmh2#

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

with hd.open("/home/file.csv") as f:
    df =  pd.read_csv(f)

我想 read_csv 使用一个文件句柄,或者事实上任何一个iterable都可以为它提供行。我知道 numpy csv阅读器可以。 pd.read_csv("/home/file.csv") 如果常规python文件 open 工作-即,它读取一个常规的本地文件。

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

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

相关问题