如何在使用 Sparkr 和 Rstudio 时使用 write.df 存储 csv 文件?

How to use write.df store a csv file when using Sparkr and Rstudio?

我正在研究Sparkr。我有一个 csv 文件:

a <- read.df(sqlContext,"./mine/a2014.csv","csv")

我想用write.df来存储这个文件。但是,当我使用:

write.df(a,"mine/a.csv")

我得到一个名为 a.csv 的文件夹,其中根本没有 csv 文件。

Spark 将您的数据划分为块,因此它可以将这些分区分布到集群中的节点上。在写入数据时,它保留了这个分区:它创建一个目录并将每个分区写入一个单独的文件。这样它可以更好地利用分布式文件系统(将每个块并行写入 HDFS/S3),并且不必将所有数据收集到一台可能无法处理数量的机器上数据。

两个名称较长的文件是您数据的 2 个分区,并保存实际的 CSV 数据。您可以通过复制它们、使用 .csv 扩展名重命名副本并双击它们,或使用类似 head longfilename.

的名称来查看。

您可以通过尝试读回来测试写入是否成功:为 Spark 提供目录路径,它会通过元数据和您提到的 _SUCCESS 文件将其识别为分区文件.

如果你确实需要一个文件中的所有数据,你可以通过使用repartition将分区数量减少到1然后写入来实现:

b <- repartition(a, 1)
write.df(b,"mine/b.csv")

这将导致只有一个长名称文件,它是一个包含所有数据的 CSV 文件。

(我不使用未经测试的 SparkR;在 Scala/PySpark 中你更愿意使用 coalesce 而不是 repartition 但我找不到等效的 SparkR 函数)