[英]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.