2016-02-26 4 views
4

я использую pydoop прочитать в файле с HDFS, и когда я использую:Чтение в CSV-файла в качестве dataframe из HDFS

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

Он показывает мне файл в стандартный вывод.

Есть ли способ читать в этом файле как dataframe? Я пытался использовать 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 

ответ

5

Я ничего не знаю о hdfs, но мне интересно, если следующий может работать:

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

Я предполагаю, что read_csv работает с файловой ручкой, или на самом деле любой iterable, который будет кормить его линий. Я знаю читателей csv numpy.

pd.read_csv("/home/file.csv") будет работать, если работает обычный файл Python open, т. Е. Он читает файл обычного локального файла.

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

Но, видимо hd.open использует другое место или протокол, поэтому файл не является локальным. Если мое предложение не работает, вам (или нам) нужно больше копать в документации hdfs.

+0

Работает отлично, спасибо! – lordingtar