我是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
错误
我肯定错过了一些东西..任何人都可以帮助我吗?
答案 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
,那么您应该使用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))