python - 从 CPython 中一次处理来自 hdfs 文件的数据的最佳方法(不使用标准输入)?

标签 python hadoop line hdfs

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

谢谢,

设置跳转

最佳答案

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

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


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

然后:

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

关于python - 从 CPython 中一次处理来自 hdfs 文件的数据的最佳方法(不使用标准输入)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556503/

相关文章:

python - 减去 Pandas 数据帧之间的行

python atexit错误: the first argument must be callable

python - 正则表达式行以字符集开头

hadoop - 是否可以在 32 位 Ubuntu 12.04 中安装 CDH?

c# - 如何从Azure Blob存储中的Hadoop AvroContainer删除记录?

python - Django DRF - 通过权限限制对 ListView 的访问

hadoop - Apache Spark完成后将杀死所有用户进程

Java - 基于顶点之间距离的邻接矩阵

arrays - perl qw() 函数分配行而不是单词

json - 确定 JSON 解析错误的位置