Как прочитать текстовый файл из HDFS в Scala изначально (без использования Spark)? - PullRequest
0 голосов
/ 30 мая 2020

Я знаю, что могу читать локальный файл в Scala вот так:

import scala.io.Source

val filename = "laba01/ml-100k/u.data"

for(line <- Source.fromFile(filename).getLines){
    println(line)
}

Это кодовые слова прекрасны и выводят строки из текстового файла. Я запускаю его в JupyterHub с Apache Toree.

Я знаю, что могу читать с HDFS на этом сервере, потому что когда я запускаю следующий код в другой ячейке:

import sys.process._
"hdfs dfs -ls /labs/laba01/ml-100k/u.data"!

он тоже работает нормально, и я могу видеть этот результат:

-rw-r--r--   3 hdfs hdfs    1979173 2020-04-20 17:56 /labs/laba01/ml-100k/u.data

lastException: Throwable = null
warning: there was one feature warning; re-run with -feature for details

0

Теперь я хочу прочитать тот же файл, который хранится в HDFS, запустив это:

import scala.io.Source

val filename = "hdfs:/labs/laba01/ml-100k/u.data"

for(line <- Source.fromFile(filename).getLines){
    println(line)
}

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

lastException = null

Name: java.io.FileNotFoundException
Message: hdfs:/labs/laba01/ml-100k/u.data (No such file or directory)
StackTrace:   at java.io.FileInputStream.open0(Native Method)
  at java.io.FileInputStream.open(FileInputStream.java:195)
  at java.io.FileInputStream.<init>(FileInputStream.java:138)
  at scala.io.Source$.fromFile(Source.scala:91)
  at scala.io.Source$.fromFile(Source.scala:76)
  at scala.io.Source$.fromFile(Source.scala:54)

Итак, как мне прочитать этот текстовый файл из HDFS?

1 Ответ

3 голосов
/ 30 мая 2020

scala.io не сможет найти ни одного файла в HDFS. Это не для этого. Если я не ошибаюсь, он может читать только файл, который находится в вашем локальном (file:///)

Вам нужно использовать hadoop-common.jar для чтения данных из HDFS.

Вы можете найти пример кода здесь { ссылка }

...