使用Scala从HDFS读取数据
我是斯卡拉的新手。如何使用Scala(不使用Spark)从HDFS读取文件? 当我在谷歌上搜索时,我只找到了HDFS的写入选项使用Scala从HDFS读取数据,scala,hdfs,Scala,Hdfs,我是斯卡拉的新手。如何使用Scala(不使用Spark)从HDFS读取文件? 当我在谷歌上搜索时,我只找到了HDFS的写入选项 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.io.PrintWriter; /** * @author ${user.name} */ object A
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.PrintWriter;
/**
* @author ${user.name}
*/
object App {
//def foo(x : Array[String]) = x.foldLeft("")((a,b) => a + b)
def main(args : Array[String]) {
println( "Trying to write to HDFS..." )
val conf = new Configuration()
//conf.set("fs.defaultFS", "hdfs://quickstart.cloudera:8020")
conf.set("fs.defaultFS", "hdfs://192.168.30.147:8020")
val fs= FileSystem.get(conf)
val output = fs.create(new Path("/tmp/mySample.txt"))
val writer = new PrintWriter(output)
try {
writer.write("this is a test")
writer.write("\n")
}
finally {
writer.close()
println("Closed!")
}
println("Done!")
}
}
请帮助我。如何使用scala从HDFS读取文件或加载文件。其中一种方法(有点函数式)如下:
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileSystem, Path}
import java.net.URI
import scala.collection.immutable.Stream
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))
//This example checks line for null and prints every existing line consequentally
readLines.takeWhile(_ != null).foreach(line => println(line))
此外,如果您感兴趣,您还可以看一看或者,这些问题看起来与您的问题相关,并包含工作(但更像Java)代码示例。您到目前为止尝试了什么,例如,对于难以理解的文档,我如何选择将小文件从HDFS复制到本地文件系统并按顺序处理。什么是
URI
?如何导入?我是通过将URI
导入为import java.net.URI
并将其设置为hdfs://
来实现的,因为我的Scala服务与hdfs nameserver主机在同一个节点上运行。