簡體   English   中英

如何根據行數對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循環編寫我自己的函數),該方法可以創建與文件中的行數相關的分區。 但是我不知道該怎么做。

我的想法是,如果我的行數少於一百萬,我將只有一個分區。 如果我有超過一百萬=>兩個分區,則有200萬=> 3個分區,依此類推。

有可能做這樣的事情嗎?

您可以根據數據幀中的行數來更改分區數。

例如:

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

val df2 = df.repartition(numPartitions=partitions)

然后像以前一樣將新的數據幀寫入csv文件。

注意:可能需要使用重repartition而不是coalesce來確保每個分區中的行數大致相等,請參見Spark-repartition()與coalesce()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM