Как написать небольшой список строк в файл на HDFS?

спросил: 28 апреля 2018 в 09:36 в: scala

Я написал следующую функцию, которая направлена ​​на запись списка строк в HDFS, но я столкнулся с некоторыми трудностями:

import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.hadoop.io._
import org.apache.hadoop.conf.Configuration
import java.io.BufferedOutputStreamdef 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()
}

Но когда я пытаюсь использовать ввод типа Список [String] Я получаю ошибки компиляции.

Вот пример списка ввода, который я пытаюсь сохранить:

val input = List(
  "banana apple strawberry",
  "Apple banana strawberry"
)

, который я хотел бы сохранить в этом точный файл:

val outputpath = "/folder/test.YMSL"

Любые идеи, как это сделать?

1 ответ

Xavier Guihot ответил: 28 апреля 2018 в 04:29

Вам понадобится присоединиться к вашему входу List[String] как String, соединенному с '\n':

List("banana apple strawberry", "Apple banana strawberry").mkString("\n")
res0: String = "banana apple strawberry\nApple banana strawberry"

Кроме того, FSDataOutputStream, который вы создаете из метода FileSystem.create, на самом деле имеет метод write, который позволяет вам напрямую писать в файле на hdfs.

Поэтому нет необходимости создавать поток BufferedOutputStream.


Я использую этот помощник:

import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.hadoop.conf.Configurationdef 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)

, который можно вызвать следующим образом:

writeToHdfsFile(
  List("banana apple strawberry", "Apple banana strawberry"), 
  "/folder/test.YMSL"
)