一尘不染

如何在群集上保存文件

python

我已使用连接到集群,ssh并使用将程序发送到集群

spark-submit --master yarn myProgram.py

我想将结果保存在文本文件中,并尝试使用以下几行:

counts.write.json("hdfs://home/myDir/text_file.txt")
counts.write.csv("hdfs://home/myDir/text_file.csv")

但是,它们都不起作用。程序完成,我在中找不到文本文件myDir。你知道我该怎么做吗?

另外,有没有一种方法可以直接写入本地计算机?

编辑:我发现该home目录不存在,所以现在我将结果另存为:
counts.write.json("hdfs:///user/username/text_file.txt")
但这会创建一个名为的目录,text_file.txt并且我里面有很多文件,里面有部分结果。但是我想要一个包含最终结果的文件。有什么想法我该怎么做?


阅读 177

收藏
2021-01-20

共1个答案

一尘不染

由于计算是分布式的,因此Spark会将结果保存在多个文件中。因此写:

counts.write.csv("hdfs://home/myDir/text_file.csv")

表示将每个分区上的数据保存为文件 夹中 的独立文件text_file.csv。如果要将数据保存为单个文件,请coalesce(1)首先使用:

counts.coalesce(1).write.csv("hdfs://home/myDir/text_file.csv")

这会将所有数据放入一个分区,因此保存的文件数将为1。但是,如果您有很多数据,这可能是个坏主意。如果数据非常小,则使用collect()替代方法。这会将所有数据作为数组放置在驱动程序计算机上,然后可以将其保存为单个文件。

2021-01-20