从 hdfs 读取 csv 文件作为数据帧
Reading in csv file as dataframe from hdfs
我正在使用 pydoop 从 hdfs 读取文件,当我使用时:
import pydoop.hdfs as hd
with hd.open("/home/file.csv") as f:
print f.read()
它向我显示了标准输出中的文件。
有什么方法可以让我将这个文件作为数据框读入吗?我试过使用 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
我对 hdfs
几乎一无所知,但我想知道以下方法是否可行:
with hd.open("/home/file.csv") as f:
df = pd.read_csv(f)
我假设 read_csv
使用文件句柄,或者实际上是任何将为其提供行的可迭代对象。我知道 numpy
csv 阅读器。
如果常规 Python 文件 open
有效,pd.read_csv("/home/file.csv")
将有效 - 即它读取常规本地文件的文件。
with open("/home/file.csv") as f:
print f.read()
但显然 hd.open
正在使用其他位置或协议,因此该文件不是本地文件。如果我的建议不起作用,那么您(或我们)需要深入研究 hdfs
文档。
使用read
代替open
,有效
with hd.read("/home/file.csv") as f:
df = pd.read_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"))
我正在使用 pydoop 从 hdfs 读取文件,当我使用时:
import pydoop.hdfs as hd
with hd.open("/home/file.csv") as f:
print f.read()
它向我显示了标准输出中的文件。
有什么方法可以让我将这个文件作为数据框读入吗?我试过使用 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
我对 hdfs
几乎一无所知,但我想知道以下方法是否可行:
with hd.open("/home/file.csv") as f:
df = pd.read_csv(f)
我假设 read_csv
使用文件句柄,或者实际上是任何将为其提供行的可迭代对象。我知道 numpy
csv 阅读器。
open
有效,pd.read_csv("/home/file.csv")
将有效 - 即它读取常规本地文件的文件。
with open("/home/file.csv") as f:
print f.read()
但显然 hd.open
正在使用其他位置或协议,因此该文件不是本地文件。如果我的建议不起作用,那么您(或我们)需要深入研究 hdfs
文档。
使用read
代替open
,有效
with hd.read("/home/file.csv") as f:
df = pd.read_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"))