从Scala中的HDFS加载XML文件
我想使用XMLScalaAPI从HDFS加载一个XML文件。我尝试如下,但它不承认的道路。有人能告诉我如何使用Scala从HDFS加载文件吗从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
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
迭代并获取路径。