Scala 使用spark将大文件拆分为小文件并保存在不同路径中
如何将大文件/RDD/DF拆分为小文件并保存到不同路径 例如:如果有一个文件在文本文件中包含用户名(单列),并希望将其拆分为N个文件,然后将这N个文件写入不同的目录Scala 使用spark将大文件拆分为小文件并保存在不同路径中,scala,apache-spark,Scala,Apache Spark,如何将大文件/RDD/DF拆分为小文件并保存到不同路径 例如:如果有一个文件在文本文件中包含用户名(单列),并希望将其拆分为N个文件,然后将这N个文件写入不同的目录 val x=20 val namesRDD=sc.textfile("readPath") val N = namesRDD.count/x 如何将namesRDD拆分为N个文件并将其写入某个“savepath/N/”—即第一个文件写入“savepath/1/”,第二个文件写入“savepath/2/”,依此类推。使用repart
val x=20
val namesRDD=sc.textfile("readPath")
val N = namesRDD.count/x
如何将namesRDD拆分为N个文件并将其写入某个“savepath/N/”—即第一个文件写入“savepath/1/”,第二个文件写入“savepath/2/”,依此类推。使用
repartitionByRange
可以以这种方式拆分数据
例如:
df.repartitionByRange($"region").write.csv("data/regions")
这将为数据中显示的每个区域创建一个零件文件。如果您有10个区域,您将有10个不同的零件-
文件
如果要指定自己的名称,则必须使用foreachPartition
应用自己的函数来保存文件
df.repartitionByRange($"region")
.foreachPartition(region => {
// custom implementation
})
使用重新分区将文件/df拆分为N个部分(如果没有列可按range进行重新分区并希望随机拆分)
然后读取这些分区(在分区Df上执行任何操作)
for(我的repartitionByRange是否也可以使用Pyspark?我在2.3 Spark版本中找不到任何方法
df.repartition(N)
.write.text(storePath)
for (i <- 0 until N) {
val parts = f"${i}%04d"
val splitPath = s"${path}/part-0${partNumber}-*"
//read data from the `splitPath`
}