簡體   English   中英

將大文件拆分為小文件,並使用spark保存在不同的路徑中

[英]split large file into small files and save in different paths using spark

如何將大文件/ RDD / DF拆分為小文件並保存到其他路徑。

例如:如果文本文件中有一個包含用戶名(單列)的文件,並且想要將其拆分為N個文件,然后將該N個文件寫入不同的目錄。

val x=20
val namesRDD=sc.textfile("readPath")
val N = namesRDD.count/x

如何將nameRDD拆分為N個文件並將其寫入“ savepath / N /”中-即第一個文件寫入“ savepath / 1 /”,第二個文件寫入“ savepath / 2 /”,依此類推。

使用repartitionByRange將使您以這種方式拆分數據。

例:

df.repartitionByRange($"region").write.csv("data/regions")

這將為數據中出現的每個region創建一個零件文件。 如果您有10個區域,則將有10個不同的part-文件。

如果要指定自己的名稱,則必須應用自己的函數使用foreachPartition保存文件。

df.repartitionByRange($"region")
  .foreachPartition(region => {
     // custom implementation
  })

使用repartition將文件/ df分成N個部分(如果沒有要執行repartitionByRange的列並且想要隨機分割)

df.repartition(N)
  .write.text(storePath)

然后讀取這些分區(在該分區的Df上執行任何操作)

  for (i <- 0 until N) {
    val parts = f"${i}%04d"
    val splitPath = s"${path}/part-0${partNumber}-*"
    //read data from the `splitPath`
  }

暫無
暫無

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

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