从Python中存储在HDFS上的文件中读取行的最有效方法是什么?

时间:2012-05-20 08:57:25

标签: python hadoop hdfs

我试图找到一种方法来读取存储在HDFS服务器上的多个文本文件中的数据行。 我需要解析每一行并只保留部分数据,所以我不想在本地保存文件。

我需要一种方法来连接服务器,遍历特定文件夹中的所有文件,并从每个文件读取所有行,并对它们执行(与此问题无关)操作。

2 个答案:

答案 0 :(得分:1)

在问题的评论中提到的GitHub存储库python-hdfs,通过libhdfs从Python查询HDFS,到HDFS的C接口。最近,WebHDFS被引入,它为HDFS提供了一个REST接口。 https://github.com/drelu/webhdfs-py是WebHDFS的Python客户端,可能是比python-hdfs更好的选择。

答案 1 :(得分:0)

这样做的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

如果获取的文件对象不支持所有文件方法,请在执行for line in之前将其内容包装在StringIO中。