如何根据行数重新分区 Spark 数据帧?
How to repartition Spark dataframe depending on row count?
我写了一个简单的程序来请求一个巨大的数据库。为了导出我的结果,我写了这个函数:
result.coalesce(1).write.options(Map("header" -> "true", "delimiter" > ";")).csv(mycsv.csv)
我使用coalesce
方法只得到一个文件作为输出。问题是结果文件包含超过一百万行。所以,我无法在 Excel...
中打开它
所以,我考虑使用一种方法(或使用 for 循环编写我自己的函数)来创建与我的文件中的行数相关的分区。但是我不知道我该怎么做。
我的想法是,如果我的行少于一百万,我将有一个分区。如果我有超过一百万 => 两个分区,两百万 => 3 个分区等等。
是否可以这样做?
您可以根据数据框中的行数更改分区数。
例如:
val rowsPerPartition = 1000000
val partitions = (1 + df.count() / rowsPerPartition).toInt
val df2 = df.repartition(numPartitions=partitions)
然后像以前一样将新数据帧写入 csv 文件。
注意: 可能需要使用 repartition
而不是 coalesce
以确保每个分区中的行数大致相等,请参阅。
我写了一个简单的程序来请求一个巨大的数据库。为了导出我的结果,我写了这个函数:
result.coalesce(1).write.options(Map("header" -> "true", "delimiter" > ";")).csv(mycsv.csv)
我使用coalesce
方法只得到一个文件作为输出。问题是结果文件包含超过一百万行。所以,我无法在 Excel...
所以,我考虑使用一种方法(或使用 for 循环编写我自己的函数)来创建与我的文件中的行数相关的分区。但是我不知道我该怎么做。
我的想法是,如果我的行少于一百万,我将有一个分区。如果我有超过一百万 => 两个分区,两百万 => 3 个分区等等。
是否可以这样做?
您可以根据数据框中的行数更改分区数。
例如:
val rowsPerPartition = 1000000
val partitions = (1 + df.count() / rowsPerPartition).toInt
val df2 = df.repartition(numPartitions=partitions)
然后像以前一样将新数据帧写入 csv 文件。
注意: 可能需要使用 repartition
而不是 coalesce
以确保每个分区中的行数大致相等,请参阅