在 R 和 Sparklyr 中,将 table 写入 .CSV (spark_write_csv) 会生成许多文件,而不是一个文件。为什么?我可以改变吗?
In R and Sparklyr, writing a table to .CSV (spark_write_csv) yields many files, not one single file. Why? And can I change that?
背景
我正在 R
中的一个非常大的数据集上进行一些数据操作(连接等),所以我决定使用本地安装的 Apache Spark 和 sparklyr
能够使用我的 dplyr
代码来操纵它。 (我是 运行 Windows 10 Pro;R
是 64 位。)我已经完成了所需的工作,现在要输出 sparklyr
table 到 .csv 文件。
问题
这是我用来将 .csv 文件输出到硬盘驱动器上的文件夹的代码:
spark_write_csv(d1, "C:/d1.csv")
但是,当我导航到有问题的目录时,我没有看到一个 csv 文件 d1.csv
。相反,我看到了一个新创建的名为 d1
的文件夹,当我在其中单击时,我看到 ~10 个 .csv 文件都以“part”开头。这是屏幕截图:
该文件夹还包含相同数量的 .csv.crc
个文件,我从谷歌搜索中看到这些文件“用于存储拆分文件存档的 CRC 代码”。
这是怎么回事?有没有办法将这些文件重新放在一起,或者让 spark_write_csv
输出单个文件,如 write.csv
?
编辑
下面的一位用户建议 this post 可以回答这个问题,而且几乎可以回答,但是提问者似乎正在寻找可以满足我要求的 Scala 代码,而我正在寻找 R
执行我想要的代码。
数据将被分成多个分区。当您将数据帧保存为 CSV 时,您将从每个分区获取文件。在调用 spark_write_csv 方法之前,您需要将所有数据带到单个分区以获得单个文件。
您可以使用称为 coalese 的方法来实现此目的。
coalesce(df, 1)
我遇到了完全相同的问题。
简单来说,分区是为了提高计算效率。如果你有分区,多个workers/executors可以在每个分区上写入table。相比之下,如果你只有一个分区,csv 文件只能由一个 worker/executor 写入,使任务慢得多。同样的原则不仅适用于写 tables,也适用于并行计算。
关于分区的更多详细信息,您可以查看this link。
假设我想将 table
保存为路径为 path/to/table.csv
的单个文件。我会这样做
table %>% sdf_repartition(partitions=1)
spark_write_csv(table, path/to/table.csv,...)
您可以在 official documentation 中查看 sdf_repartition
的完整详细信息。
背景
我正在 R
中的一个非常大的数据集上进行一些数据操作(连接等),所以我决定使用本地安装的 Apache Spark 和 sparklyr
能够使用我的 dplyr
代码来操纵它。 (我是 运行 Windows 10 Pro;R
是 64 位。)我已经完成了所需的工作,现在要输出 sparklyr
table 到 .csv 文件。
问题
这是我用来将 .csv 文件输出到硬盘驱动器上的文件夹的代码:
spark_write_csv(d1, "C:/d1.csv")
但是,当我导航到有问题的目录时,我没有看到一个 csv 文件 d1.csv
。相反,我看到了一个新创建的名为 d1
的文件夹,当我在其中单击时,我看到 ~10 个 .csv 文件都以“part”开头。这是屏幕截图:
该文件夹还包含相同数量的 .csv.crc
个文件,我从谷歌搜索中看到这些文件“用于存储拆分文件存档的 CRC 代码”。
这是怎么回事?有没有办法将这些文件重新放在一起,或者让 spark_write_csv
输出单个文件,如 write.csv
?
编辑
下面的一位用户建议 this post 可以回答这个问题,而且几乎可以回答,但是提问者似乎正在寻找可以满足我要求的 Scala 代码,而我正在寻找 R
执行我想要的代码。
数据将被分成多个分区。当您将数据帧保存为 CSV 时,您将从每个分区获取文件。在调用 spark_write_csv 方法之前,您需要将所有数据带到单个分区以获得单个文件。
您可以使用称为 coalese 的方法来实现此目的。
coalesce(df, 1)
我遇到了完全相同的问题。
简单来说,分区是为了提高计算效率。如果你有分区,多个workers/executors可以在每个分区上写入table。相比之下,如果你只有一个分区,csv 文件只能由一个 worker/executor 写入,使任务慢得多。同样的原则不仅适用于写 tables,也适用于并行计算。
关于分区的更多详细信息,您可以查看this link。
假设我想将 table
保存为路径为 path/to/table.csv
的单个文件。我会这样做
table %>% sdf_repartition(partitions=1)
spark_write_csv(table, path/to/table.csv,...)
您可以在 official documentation 中查看 sdf_repartition
的完整详细信息。