首页 > 解决方案 > 如何从 Scala 中的 HDFS 本​​地读取文本文件(不使用 Spark)?

问题描述

我知道我可以像这样读取本地文件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呢?

标签: scalahadoophdfstext-filesapache-toree

解决方案


scala.io将无法在 HDFS 中找到任何文件。不是为了那个。如果我没记错的话,它只能读取本地(file:///)中的文件

您需要使用hadoop-common.jar从 HDFS 读取数据。

您可以在此处找到代码示例 https://stackoverflow.com/a/41616512/7857701


推荐阅读