首页 > 解决方案 > 在 Scala 中从 HDFS 加载 XML 文件

问题描述

我想使用 XML Scala API 从 HDFS 加载 XML 文件。我正在尝试如下,但它无法识别路径。谁能告诉我如何使用 Scala 从 HDFS 加载文件?

import scala.xml.{NodeSeq, XML}

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

标签: scala

解决方案


我假设您使用的是 Scala 2.12.x;我还假设这四个斜线hdfs:////user...是错字。

您正在使用方法XML.loadFile(name: String);它在内部使用FileInputStream. 无法使用普通的FileInputStream. 您需要一个支持 HDFS 的输入流。你可以在org.apache.hadoop:hadoop-hdfs图书馆找到它。

然后代码如下所示:

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs._
// configure properly so the code knows which Hadoop cluster to connect to
// https://hadoop.apache.org/docs/r3.2.0/api/org/apache/hadoop/conf/Configuration.html
val conf = new Configuration()

// obtain input stream instance
val hdfsPath: Path = new Path("hdfs://user/np.user/raw/xmlfile.xml")
val fs: FileSystem = hdfsPath.getFileSystem(conf)
val inputStream: FSDataInputStream = fs.open(hdfsPath)
// load XML
try {
  val xml_load = XML.load(inputStream)
} finally {
  // close resources; of course, this will silently swallow any exception in close() methods 
  inputStream.close()
  fs.close()
}

推荐阅读