如何将一小段字符串写入HDFS文件中?

时间:2018-05-22 11:16:19

标签: scala hdfs

我编写了以下函数,旨在将字符串列表写入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"

任何想法怎么做?

1 个答案:

答案 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)