【发布时间】:2012-09-11 05:32:50
【问题描述】:
这是我的问题:我在 HDFS 中有一个可能很大的文件(=不足以容纳所有内存)
我想做的是避免将此文件缓存在内存中,而只像处理常规文件一样逐行处理它:
for line in open("myfile", "r"):
# do some processing
我正在寻找是否有一种简单的方法可以在不使用外部库的情况下正确完成这项工作。我可能可以使它与libpyhdfs 或python-hdfs 一起工作,但如果可能的话,我希望避免在系统中引入新的依赖项和未经测试的库,特别是因为这两个似乎都没有得到大量维护并声明它们应该不能用于生产。
我正在考虑使用标准的“hadoop”命令行工具使用 Python subprocess 模块来执行此操作,但我似乎无法执行我需要的操作,因为没有命令行工具可以执行此操作我的处理,我想以流方式为每一行执行一个 Python 函数。
有没有办法使用 subprocess 模块将 Python 函数应用为管道的正确操作数?或者更好的是,像文件一样打开它作为生成器,这样我就可以轻松处理每一行?
cat = subprocess.Popen(["hadoop", "fs", "-cat", "/path/to/myfile"], stdout=subprocess.PIPE)
如果有另一种方法可以在不使用外部库的情况下实现我上面描述的内容,我也很开放。
感谢您的帮助!
【问题讨论】:
-
你可以使用bitbucket.org/turnaev/cyhdfs 我几天前发布了它并用于生产。 PyPI 链接pypi.python.org/pypi/cyhdfs/0.1.2 稍旧,还可以。
标签: python hadoop subprocess hdfs