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

时间:2017-07-23 20:11:08

标签: scala hadoop

我是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 个答案:

答案 0 :(得分:7)

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))