将列表写入HDFS中的文件

时间:2016-10-06 16:41:12

标签: python hadoop subprocess

我正在编写一个在Hadoop集群上运行的python代码,需要将一些中间数据存储在一个文件中。由于我想在集群上运行代码,我想将中间数据写入HDFS上的/tmp目录。我将它用于后续步骤后立即删除该文件。我怎样才能做到这一点?

我知道我可以使用subprocess.call()但是如何将数据写入文件?我想写的数据在列表中。

我尝试了以下语法:

for item in mylist:
    subprocess.call(["echo '%s' | hadoop fs -put - /tmp/t"%item], shell=True)

它写得很好,但这里有一个问题:对于第二个记录,它会抛出错误/tmp/t已经存在。

我有办法做到这一点吗?

2 个答案:

答案 0 :(得分:0)

您正面临该错误,因为从shell写入时HDFS无法附加文件。每次要转储文件时都需要创建新文件。

更好的方法是使用python HDFS客户端为您进行转储。我可以推荐snakebitepydoophdfs个包。我没有试过第三个,所以我不能评论它们,但其他两个工作正常。

答案 1 :(得分:0)

只需将'-put'更改为'-appendToFile':

document.addEventListener("DOMContentLoaded", function() { 
    window.open("https://www.stackoverflow.com/");
});