如何从 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
,那么您应该使用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))
【讨论】:
以上是关于如何从 Scala 代码中读取 HDFS 文件的主要内容,如果未能解决你的问题,请参考以下文章
在 Spark/Scala 中写入 HDFS,读取 zip 文件
在本地文件系统(不是HDFS)中使用Scala读取Apache Spark中的文件时如何更改输入块大小[重复]
使用 spark/scala 从 HDFS 目录中获取所有 csv 文件名