从Scala中的HDFS加载XML文件

从Scala中的HDFS加载XML文件,scala,Scala,我想使用XMLScalaAPI从HDFS加载一个XML文件。我尝试如下,但它不承认的道路。有人能告诉我如何使用Scala从HDFS加载文件吗 import scala.xml.{NodeSeq, XML} val xml_load = XML.loadFile("hdfs:////user/np.user/raw/xmlfile.xml") 我假设您使用的是Scala 2.12.x;我还假设hdfs:////user...是打字错误 您正在使用方法XML.loadFile(名称:String

我想使用XMLScalaAPI从HDFS加载一个XML文件。我尝试如下,但它不承认的道路。有人能告诉我如何使用Scala从HDFS加载文件吗

import scala.xml.{NodeSeq, XML}

val xml_load = XML.loadFile("hdfs:////user/np.user/raw/xmlfile.xml")

我假设您使用的是Scala 2.12.x;我还假设
hdfs:////user...
是打字错误

您正在使用方法
XML.loadFile(名称:String)
;它在内部使用
FileInputStream
。无法使用普通的
FileInputStream
打开HDFS文件。您需要一个支持HDFS的输入流。您可以在
org.apache.hadoop:hadoop hdfs
库中找到它

代码如下所示:

import org.apache.hadoop.conf.Configuration
导入org.apache.hadoop.fs_
//正确配置,以便代码知道要连接到哪个Hadoop集群
// https://hadoop.apache.org/docs/r3.2.0/api/org/apache/hadoop/conf/Configuration.html
val conf=新配置()
//获取输入流实例
val hdfsPath:Path=新路径(“hdfs://user/np.user/raw/xmlfile.xml")
val fs:FileSystem=hdfsPath.getFileSystem(conf)
val inputStream:FSDataInputStream=fs.open(hdfsPath)
//加载XML
试一试{
val xml_load=xml.load(inputStream)
}最后{
//关闭资源;当然,这将默默地吞下close()方法中的任何异常
inputStream.close()
财政司司长(关闭)
}

感谢您的快速回复,我正在使用scala 2.11,您对hdfs路径(输入错误)的理解是正确的。当我试图获取文件系统时,它无法识别路径--val fs:FileSystem=path.getFileSystem(conf)。我是否缺少一些要包含的库?如果我使用FileSystem.get(conf),它会工作。如果我想从文件夹中读取多个文件,也可以这样做hdfs://user/np.user/raw/,我们如何阅读它们?非常感谢你的帮助。@Babu是的,对不起,有个拼写错误。我将变量定义为
hdfsPath
,但随后将其引用为
path
。我修复了这个例子。@Babu在
文件系统上有
listFiles
方法;它返回一个
远程迭代器[LocatedFileStatus]
,您可以使用
getPath
方法从
FileStatus
迭代并获取
路径。