我试图找出一种方法来从存储在 HDFS 服务器上的多个文本文件中读取数据行,在 Python 中。我需要解析每一行并只保留部分数据,所以我不想将文件保存在本地。
我需要一种连接到服务器的方法,查看特定文件夹中的所有文件,并从每个文件中读取所有行并对它们执行(与此问题无关)操作。
问题评论中提到的 GitHub 存储库 python-hdfs 通过 libhdfs(HDFS 的 C 接口)从 Python 查询 HDFS。最近引入了WebHDFS,它为HDFS提供了一个REST接口。https://github.com/drelu/webhdfs-py是 WebHDFS 的 Python 客户端,可能比 python-hdfs 更好。
这样做的pythonic方法是使用itertools.chain。但是您可以编写一个小型实用程序生成器函数,它迭代文件,然后迭代文件中的行并一次生成一行。像这样的东西:
def lines_in_files(connection):
for f in # some code which fetches a files at a time from the connection
for line in f:
yield line
如果您获取的文件对象不支持所有文件方法,请在执行之前将其内容包装在 StringIO 中for line in
。