web-dev-qa-db-ja.com

hdfsからデータフレームとしてcsvファイルを読み込む

Pydoopを使用してhdfsからファイルを読み込み、使用する場合:

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

Stdoutのファイルが表示されます。

このファイルをデータフレームとして読み取る方法はありますか?パンダの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
8
lordingtar

hdfsについてはほとんど何も知りませんが、次のことが機能するのではないかと思います。

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

_read_csv_はファイルハンドル、または実際にはファイルハンドルをフィードする反復可能オブジェクトで機能すると思います。私はnumpycsvリーダーがそうすることを知っています。

pd.read_csv("/home/file.csv")は、通常のPython file openが機能する場合、つまり、ファイルを通常のローカルファイルとして読み取る場合に機能します。

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

しかし、明らかに_hd.open_は他の場所またはプロトコルを使用しているため、ファイルはローカルではありません。私の提案がうまくいかない場合は、あなた(または私たち)はhdfsドキュメントをさらに掘り下げる必要があります。

14
hpaulj