Как записать небольшой список строк в файл на HDFS? - PullRequest
0 голосов
/ 22 мая 2018

Я написал следующую функцию, которая предназначена для записи списка строк в 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] Iполучить ошибки компиляции.

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

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

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

val outputpath = "/folder/test.YMSL"

Есть идеи как это сделать?

1 Ответ

0 голосов
/ 22 мая 2018

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

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

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

Так что нет необходимости создавать поток 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)

, который можно назвать так:

writeToHdfsFile(
  List("banana apple strawberry", "Apple banana strawberry"), 
  "/folder/test.YMSL"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...