如何从 Scala 代码中读取 HDFS 文件

Posted

技术标签:

【中文标题】如何从 Scala 代码中读取 HDFS 文件【英文标题】:How to read HDFS file from Scala code 【发布时间】:2017-07-23 20:11:07 【问题描述】:

我是 Scala 和 HDFS 的新手:

我只是想知道我能够从 Scala 代码中读取本地文件,但如何从 HDFS 中读取:

import scala.io.source
object ReadLine 
  def main(args:Array[String]) 
    if (args.length>0) 
      for (line <- Source.fromLine(args(0)).getLine())
        println(line)
      
    

在争论中我通过了hdfs://localhost:9000/usr/local/log_data/file1.. 但它给出了FileNotFoundException 错误 我肯定错过了一些东西..有人可以帮我吗?

【问题讨论】:

【参考方案1】:

scala.io.source api 无法从HDFS 读取。 Source 用于从本地文件系统读取。

火花

如果您想从hdfs 阅读,那么我建议您使用spark,而您必须使用sparkContext

val lines = sc.textFile(args(0))  //args(0) should be hdfs:///usr/local/log_data/file1

没有火花

如果您不想使用spark,那么您应该使用BufferedReaderStreamReaderhadoop filesystem api。例如

val hdfs = FileSystem.get(new URI("hdfs://yourUrl:port/"), new Configuration()) 
val path = new Path("/path/to/file/")
val stream = hdfs.open(path)
def readLines = Stream.cons(stream.readLine, Stream.continually( stream.readLine))

【讨论】:

以上是关于如何从 Scala 代码中读取 HDFS 文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Spark/Scala 中写入 HDFS,读取 zip 文件

在本地文件系统(不是HDFS)中使用Scala读取Apache Spark中的文件时如何更改输入块大小[重复]

使用 spark/scala 从 HDFS 目录中获取所有 csv 文件名

scala怎么读取hdfs中的文件

如何在 spark scala 中重命名 S3 文件而不是 HDFS

如何从Scala中的资源文件夹中读取文件?