如何在群集上保存文件

lad*_*ads 10 python hdfs apache-spark pyspark spark-submit

我使用连接到集群,然后使用ssh将程序发送到集群

spark-submit --master yarn myProgram.py
Run Code Online (Sandbox Code Playgroud)

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

counts.write.json("hdfs://home/myDir/text_file.txt")
counts.write.csv("hdfs://home/myDir/text_file.csv")
Run Code Online (Sandbox Code Playgroud)

但是,它们都不起作用.程序结束,我找不到文本文件myDir.你知道我怎么能这样做吗?

还有,有没有办法直接写到我的本地机器?

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

Sha*_*ica 5

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

counts.write.csv("hdfs://home/myDir/text_file.csv")
Run Code Online (Sandbox Code Playgroud)

意味着将每个分区上的数据保存为文件夹中 的单独文件text_file.csv.如果您希望将数据保存为单个文件,coalesce(1)请先使用:

counts.coalesce(1).write.csv("hdfs://home/myDir/text_file.csv")
Run Code Online (Sandbox Code Playgroud)

这会将所有数据放入一个分区,因此保存的文件数将为1.但是,如果您拥有大量数据,这可能是一个坏主意.如果数据非常小,那么使用collect()是另一种选择.这会将所有数据作为数组放入驱动程序计算机,然后可以将其保存为单个文件.