程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Python从HDFS读取文件作为流大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Python从HDFS读取文件作为流?

开发过程中遇到Python从HDFS读取文件作为流的问题如何解决?下面主要结合日常开发的经验,给出你关于Python从HDFS读取文件作为流的解决方法建议,希望对你解决Python从HDFS读取文件作为流有所启发或帮助;

您需要xreadlines,它可以从文件读取行而不将整个文件加载到内存中。

现在,我看到了您的问题,您只需要从Popen对象中获取stdout管道即可:

cat = subprocess.Popen(["hadoop", "fs", "-cat", "/path/to/myfile"], stdout=subprocess.PIPE)
for line in cat.stdout:
    print line

解决方法

这是我的问题:我在HDFS中有一个文件,该文件可能很大(=不足以容纳所有内存)

我想做的是避免必须将此文件缓存在内存中,而仅像逐行处理常规文件一样逐行处理它:

for line in open("myfile","r"):
    # do some processing

我正在寻找是否有一种简单的方法可以在不使用外部库的情况下正确完成此操作。我可能可以使它与libpyhdfs或python-
hdfs一起使用,但我想尽可能避免在系统中引入新的依赖项和未经测试的库,尤其是因为这两个似乎都没有得到大量维护,并声明不应用于生产。

我当时在虑使用Pythonsubprocess模块使用标准的“
hadoop”命令行工具来执行此操作,但是由于没有命令行工具可以进行处理,因此我似乎无法执行所需的操作,并且我想以流式方式为每行执行Python函数。

有没有一种方法可以使用subprocess模块​​将Python函数用作管道的正确操作数?甚至更好,像打开文件一样将其作为生成器打开,这样我就可以轻松地处理每一行?

cat = subprocess.Popen(["hadoop","fs","-cat","/path/to/myfile"],stdout=subprocess.PIPE)

如果有另一种方法可以在不使用外部库的情况下实现上述功能,那么我也很开放。

谢谢你的帮助 !

大佬总结

以上是大佬教程为你收集整理的Python从HDFS读取文件作为流全部内容,希望文章能够帮你解决Python从HDFS读取文件作为流所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。