如何根据行计数对 Spark 数据帧进行重新分区



我写了一个简单的程序,请求一个巨大的数据库。为了导出我的结果,我编写了这个函数:

result.coalesce(1).write.options(Map("header" -> "true", "delimiter"  > ";")).csv(mycsv.csv)

我使用 coalesce 方法只获取一个文件作为输出。问题是结果文件包含超过一百万行。所以,我无法在Excel中打开它...

因此,我想使用一种方法(或使用 for 循环编写我自己的函数),该方法可以创建与文件中行数相关的分区。但我不知道我该怎么做。

我的想法是,如果我的行数少于一百万,我将有一个分区。如果我有超过一百万=>两个分区,200万=>3个分区,依此类推。

有可能做这样的事情吗?

您可以根据数据帧中的行数更改分区数。

例如:

val rowsPerPartition = 1000000
val partitions = (1 + df.count() / rowsPerPartition).toInt
val df2 = df.repartition(numPartitions=partitions)

然后像以前一样将新数据帧写入 csv 文件。

注意:可能需要使用 repartition 而不是 coalesce 来确保每个分区中的行数大致相等,请参阅 Spark - repartition() 与 coalesce()。

相关内容

  • 没有找到相关文章

最新更新