我编写了以下函数,旨在将字符串列表写入HDFS,但我遇到了一些困难:
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.hadoop.io._
import org.apache.hadoop.conf.Configuration
import java.io.BufferedOutputStream
def fileFromList(input: String, outputPath: String) = {
val hdfs = FileSystem.get(new Configuration())
val path = new Path(outputPath)
val output= hdfs.create(path)
val outt = new BufferedOutputStream(output)
outt.write(input.getBytes)
outt.close()
hdfs.close()
}
但是当我尝试使用List [String]类型的输入时,我得到了编译错误。
以下是我尝试存储的输入列表示例:
val input = List(
"banana apple strawberry",
"Apple banana strawberry"
)
我想保存在这个确切的文件中:
val outputpath = "/folder/test.YMSL"
任何想法怎么做?
答案 0 :(得分:0)
您需要加入mut vec
作为与List[String]
加入的String
:
'\n'
此外,您从FileSystem.create
方法创建的List("banana apple strawberry", "Apple banana strawberry").mkString("\n")
res0: String = "banana apple strawberry\nApple banana strawberry"
实际上有一个FSDataOutputStream
方法,允许您直接在hdfs上写入文件。
因此无需创建write
流。
我习惯了这个帮手:
BufferedOutputStream
同时:
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.hadoop.conf.Configuration
def writeToHdfsFile(content: String, filePath: String): Unit = {
val outputFile = FileSystem.get(new Configuration()).create(new Path(filePath))
outputFile.write(content.getBytes("UTF-8"))
outputFile.close()
}
可以这样称呼:
def writeToHdfsFile(seq: Seq[String], filePath: String): Unit =
writeToHdfsFile(seq.mkString("\n"), filePath)