[英]How to Split a large parquet file to multiple parquet and save in different hadoop path by time column
[英]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.