如何从scala中的hdfs本机读取文本文件(不使用spark)?

6za6bjd0  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(672)

我知道我可以读取本地文件 Scala 像这样:

import scala.io.Source

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

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

这段代码的字很好,并打印出文本文件中的行。我试过了 JupyterHubApache 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 ?

kq0g1dla

kq0g1dla1#

scala.io 在hdfs中找不到任何文件。不是为了这个。如果我没记错的话,它只能读取本地文件( file:/// )
你需要使用 hadoop-common.jar 从hdfs读取数据。
您可以在这里找到代码示例https://stackoverflow.com/a/41616512/7857701

相关问题