我使用 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
的目录,里面有很多包含部分结果的文件。但我想要一个包含最终结果的文件。我有什么想法可以做到这一点吗?
最佳答案
由于计算是分布式的,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()
是一种替代方法。这会将所有数据作为数组放入驱动程序机器上,然后可以将其保存为单个文件。
关于python - 如何在集群上保存文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47828907/