从CPython(不使用stdin)处理hdfs文件中一次行数据的最佳方法?

2024-10-02 22:26:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在hadoop流作业中使用CPython,该作业需要从保存在hadoop文件系统中的面向行的文件访问补充信息。我所说的“补充”是指这个文件是对通过stdin传递的信息的补充。补充文件足够大,我不能直接将其放入内存并解析出行尾字符。有没有一种特别优雅的方法(或库)一次处理一行文件?在

谢谢

设置JMP


Tags: 文件方法内存hadoop信息面向stdin作业
2条回答

查看this documentation for Streaming以在Hadoop流作业中使用Hadoop Distributed Cache。您首先将文件上载到hdfs,然后告诉Hadoop在运行作业之前将其复制到任何地方,然后它会在作业的工作目录中方便地放置一个符号链接。然后就可以使用python的open()来读取带有for line in f的文件或其他任何东西。在

分布式缓存是将文件推送(开箱即用)的最有效方式,以便将作业用作资源。您不只是想从进程中打开hdfs文件,因为每个任务都会尝试通过网络流式传输文件。。。使用分布式缓存,即使多个任务在同一节点上运行,也会下载一个副本。在


首先,在运行作业时将-files hdfs://NN:9000/user/sup.txt#sup.txt添加到命令行参数中。在

然后:

for line in open('sup.txt'):
    # do stuff

你在找这个吗?在

http://pydoop.sourceforge.net/docs/api_docs/hdfs_api.html#module-pydoop.hdfs

with pydoop.hdfs.open( "supplementary", "r" ) as supplementary:
    for line in supplementary:
        # process line

相关问题 更多 >