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

在Python中,从HDFS上存储的文件中读取行的最有效方法是什么?,python,hadoop,hdfs,Python,Hadoop,Hdfs,我试图找到一种方法,用Python从HDFS服务器上存储的多个文本文件中读取数据行。 我需要解析每一行并只保留部分数据,所以我不希望将文件保存在本地 我需要一种方法连接到服务器,检查特定文件夹中的所有文件,从每个文件中读取所有行并对它们执行(与此问题无关)操作。问题注释中提到的GitHub存储库python hdfs,通过libhdfs从python查询hdfs,libhdfs是hdfs的C接口。最近,WebHDFS被引入,它为HDFS提供了一个REST接口。是用于WebHDFS的Python客

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


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

问题注释中提到的GitHub存储库python hdfs,通过libhdfs从python查询hdfs,libhdfs是hdfs的C接口。最近,WebHDFS被引入,它为HDFS提供了一个REST接口。是用于WebHDFS的Python客户端,可能是比Python hdfs更好的选择。

Python的方法是使用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中,然后再对行输入执行

如果你需要阅读你感兴趣的任何文件的每一行,那么多个微小的网络请求比两个(一个)更大的请求有什么好处?问题是我应该提出哪两个更大的请求?我正在努力决定最好的软件包,谷歌搜索抛出了这个:谢谢!这看起来应该对我有用。“可能是比python hdfs更好的选择。”为什么?因为REST接口是最近实现的,并且维护得更积极。此外,它不需要C客户机额外的构建复杂性,并且使用纯文本协议,理论上,当出现问题时,该协议更容易调试。