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

Apu*_*urw 2 hadoop scala

我是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)
      }
    }
Run Code Online (Sandbox Code Playgroud)

在论证中我已经过了hdfs://localhost:9000/usr/local/log_data/file1..但是它的给出FileNotFoundException错误我肯定错过了一些东西..任何人都可以帮助我吗?

Ram*_*jan 7

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

火花

如果你想hdfs从那时开始阅读,我建议spark你使用你必须使用的地方sparkContext.

val lines = sc.textFile(args(0))  //args(0) should be hdfs:///usr/local/log_data/file1
Run Code Online (Sandbox Code Playgroud)

没有火花

如果你不想使用spark那么你应该使用BufferedReader或StreamReader或hadoop 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))
Run Code Online (Sandbox Code Playgroud)