scala - 如何从 Scala 中的 HDFS 本地读取文本文件(不使用 Spark)?
问题描述
我知道我可以像这样读取本地文件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
呢?
解决方案
scala.io
将无法在 HDFS 中找到任何文件。不是为了那个。如果我没记错的话,它只能读取本地(file:///
)中的文件
您需要使用hadoop-common.jar
从 HDFS 读取数据。
您可以在此处找到代码示例 https://stackoverflow.com/a/41616512/7857701
推荐阅读
- mysql - 如何在 MySQL 中启用审计跟踪以捕获访问时间和用户详细信息
- java - 是否有一个 diff 算法可以解释重新定位?
- c - 为什么我的变量的值会发生变化(我在使用调试器时注意到值发生了变化)?
- scala - Alpakka 和 Akka 版本兼容性问题
- html - 在 Jekyll 中链接到以点 (`.`) 开头的文件
- scala - 为什么 trait Ordering 需要实现 Serializable?
- bash - 在 bash 脚本中设置的 LD_LIBRARY_PATH 正确但没有效果
- date - 如何在谷歌应用脚本中按日期对所有数据进行排序?
- c# - android NullPointerException:尝试调用虚拟方法 - 空对象引用
- javascript - 为什么在我的反应应用程序中 JWT 令牌在第一次登录时不可用?