python - 如何在集群上保存文件

标签 python apache-spark pyspark hdfs spark-submit

我使用 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/

相关文章:

python - 允许插入的高效 KNN 实现

java - Apache Spark 行从时间戳到日期转换异常

python - 使用亚马逊产品广告 API 搜索图书 - Python

linux - 如何将 Hive 用户设置为与 Spark 程序中的 Spark 用户不同的用户?

scala - 从 Spark 查询 MySQL 数据库

python - Pyspark - 将另一列添加到稀疏向量列

apache-spark - 设置 PYSPARK_SUBMIT_ARGS 会导致创建 SparkContext 失败

apache-spark - Pyspark - FileInputDStream : Error finding new files

python - 在 Plotly Python 中更改子图标题位置/方向

python - psycopg2.errors.SyntaxError : syntax error at or near "<"