繁体   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