gpt4 book ai didi

scala - 文件合并逻辑 : scala

转载 作者:可可西里 更新时间:2023-11-01 15:43:07 24 4
gpt4 key购买 nike

对于 Scala 专家来说,这可能是一个愚蠢的问题,但作为初学者,我很难确定解决方案。任何指针都会有所帮助。

我在 HDFS 位置按名称设置了 3 个文件:

fileFirst.dat
fileSecond.dat
fileThird.dat

它们不一定会以任何顺序存储。 fileFirst.dat 可以在最后创建,因此每次 ls 都会显示不同的文件顺序。

我的任务是按以下顺序将所有文件合并到一个文件中:fileFirst 内容,然后是 fileSecond 内容,最后是 fileThird 内容;以换行符作为分隔符,没有空格。

我尝试了一些想法,但无法想出一些可行的方法。每次组合的顺序搞乱。

下面是我合并所有进来的东西的函数:

  def writeFile(): Unit = {
val in: InputStream = fs.open(files(i).getPath)
try {
IOUtils.copyBytes(in, out, conf, false)
if (addString != null) out.write(addString.getBytes("UTF-8"))
} finally in.close()
}

Files 定义如下:

val files: Array[FileStatus] = fs.listStatus(srcPath)

这是一个更大的函数的一部分,我将在其中传递此方法中使用的所有参数。完成所有操作后,我将执行 out.close() 以关闭输出流。

欢迎任何想法,即使它违背了我正在尝试做的文件写入逻辑;只是明白我在 scala 方面不是那么好;现在:)

最佳答案

如果您可以直接枚举您的路径,那么您实际上并不需要使用listStatus。你可以尝试这样的事情(未经测试):

val relativePaths = Array("fileFirst.dat", "fileSecond.dat", "fileThird.dat")
val paths = relativePaths.map(new Path(srcDirectory, _))
try {
val output = fs.create(destinationFile)
for (path <- paths) {
try {
val input = fs.open(path)
IOUtils.copyBytes(input, output, conf, false)
} catch {
case ex => throw ex // Feel free to do some error handling here
} finally {
input.close()
}
}
} catch {
case ex => throw ex // Feel free to do some error handling here
} finally {
output.close()
}

关于scala - 文件合并逻辑 : scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56334966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com