如何从scala代码中读取hdfs文件

oxalkeyp  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(717)

我是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 错误我肯定错过了什么。。有人能帮帮我吗?

mfpqipee

mfpqipee1#

scala.io.source api无法读取 HDFS . Source 用于从本地文件系统读取。
Spark
如果你想阅读 hdfs 那我建议你用 spark 你必须使用的地方 sparkContext .

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

无Spark
如果你不想用 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))

相关问题