python—将列表写入hdfs上的文件中

o2g1uqev  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(509)

我正在编写一个在hadoop集群上运行的python代码,需要在一个文件中存储一些中间数据。因为我想在集群上运行代码,所以我想将中间数据写入 /tmp hdfs上的目录。我将在下一步使用该文件后立即将其删除。我该怎么做?
我知道我可以用 subprocess.call() 但我该如何将数据写入文件?我要写的数据在一个列表中。
我尝试了以下语法:

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

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

eivnm1vs

eivnm1vs1#

只需将“-put”更改为“-appendtofile”:

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

ev7lccsx2#

您正面临这个错误,因为hdfs在从shell写入时无法追加文件。每次要转储文件时,都需要创建新文件。
更好的方法是使用python hdfs客户机来完成转储。我可以推荐snakebite、pydoop和hdfs软件包。我还没有试过第三个,所以我不能评论他们,但其他两个工作的罚款。

相关问题